繁体   English   中英

json 使用原始 .net 类型序列化/反序列化属性“对象”

[英]json Serialize/Deserialize property "object" with primitive .net types

我有一堂课

        public class DataValue
        {
            public object Value { get; set; }
        }

存储一个内置类型 在下面的示例中,它是ushort ,但它可以是任何原始类型。

[Fact]
public void DatapointValueTestNewtonsoft()
{
    var dataValue = new DataValue
    {
       Value = (ushort) 12
    };
        
    var jsonTypeNameAll = JsonConvert.SerializeObject(dataValue, Formatting.Indented, new JsonSerializerSettings
    {
         TypeNameHandling = TypeNameHandling.All,
         ContractResolver = new CamelCasePropertyNamesContractResolver()
    });

    var dataValueDeserialized = JsonConvert.DeserializeObject<DataValue>(jsonTypeNameAll);
}

序列化/反序列化后,我得到了一个很长的时间: 在此处输入图片说明

  1. 是否可以使用正确的类型进行序列化/反序列化?
  2. 如果可能,怎么做?

我看不出有任何意义,将 json 反序列化为我不知道的类型,它与 anonymos 对象相同。 我无法想象我如何使用它。 幸运的是,C# 有泛型,这要好得多。

你必须添加一个泛型类

public class DataValue : DataValue<object> { }

public class DataValue<T>
{
    public T Value { get; set; }
}

代码

static void Main(string[] args)
    {
        var dataValue = new DataValue
        {
            Value = 12
        };

        var jsonTypeNameAll = JsonConvert.SerializeObject(dataValue, Newtonsoft.Json.Formatting.Indented, 
           new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.All,
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        });

        var dataValueDeserialized = JsonConvert.DeserializeObject<DataValue<ushort>>(jsonTypeNameAll);
            
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM