首页 > 解决方案 > 如何将 json 对象反序列化为复杂对象?

问题描述

我正在尝试将 JSON 对象反序列化为具有某些“对象”属性的对象,这些属性可能每次都不同。我有一个序列化器/反序列化器函数,在使用简单变量类型或定义的变量类型时可以正常工作。

我尝试将对象转换为正确的类,尝试将对象作为动态对象,等等。但是,我总是遇到异常:“对象引用未建立......”

反序列化函数:

        public static T deserializeJSON<T>(string json)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType($
                obj = (T)serializer.ReadObject(ms);
            }
            return obj;
        }

示例对象:

 [DataContract]
    class Client
    {
        [DataMember] private string name;
        [DataMember] private string address;
        [DataMember] private string bio;
        [DataMember] private object specific; //WHERE SPECIFIC MAY BE ANY OTHER OBJECT THAT I CAST AFTER DESERIALIZATION
    }

示例对象 2:

 [DataContract]
    class Server
    {
        [DataMember] private string name;
        [DataMember] private int value;
    }

特定属性可以是任何其他对象。想象一下“特定”属性是一个服务器类型的对象;反序列化函数可以很好地加载所有属性,而不是作为对象加载的特定属性,但不能将其转换为 Server。

PD:在反序列化的那一刻,我知道“特定”属性是什么类类型。

谢谢!

标签: c#jsonserializationdeserialization

解决方案


使用最新的 json.net 你可以使用

dynamic data = Json.Decode(json);

或者

dynamic data = JObject.Parse(json);

并且可以使用以下代码访问数据:

data.Date; 
data.Items.Count; 
data.Items[0].Name; 
data.Items[0].Price; 
data.Items[1].Name; 

推荐阅读