有一段json数据:[
{"name":"7029","Id":"NPDW","extProperties":{"relay":"-1","Number":"null"}},
{"name":"lx7029","Id":"4605","extProperties":{"relay":"-1","Number":"4605"}}
]
我建两个class:public class A
{
 public string ID
{
get ..
set ..
}
 public string Name
{
...
}public ExtProperties ep
{
...
}
}public class ExtProperties
{
...
}
使用JsonConvert.DeserializeObject(jsonString, obj.GetType());倒是可以把A的所有属性取到,可是那个ep一直为null。如何把relay和Number都定义成A的属性,也是全都为null。请问像这样复杂的json数据格式,如何完全转为一个object,转换后可以取到每个对象中的自定义类型的属性

解决方案 »

  1.   

    没用过JsonConvert,我猜
    public ExtProperties ep
    {
    ...
    }改成public ExtProperties extProperties
    {
    ...
    }
      

  2.   

    Json.NET is a popular high-performance JSON framework for .NET
      

  3.   

    我一般用.net framework的库,下面的代码已经测试通过。
                string temp11111 = @"[
    {""name"":""7029"",""Id"":""NPDW"",""extProperties"":{""relay"":""-1"",""Number"":""null""}},
    {""name"":""lx7029"",""Id"":""4605"",""extProperties"":{""relay"":""-1"",""Number"":""4605""}}
    ]";
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Person>));            byte[] buffer = Encoding.UTF8.GetBytes(temp11111);
                using (MemoryStream stream = new MemoryStream(buffer))
                {
                    List<Person> persons = serializer.ReadObject(stream) as List<Person>;
                }          [DataContract]  
            public class Person
            {
                [DataMember] 
                public string Id{get; set;}            [DataMember] 
                public string name{get; set;}            [DataMember] 
                public ExtProperties extProperties{get; set;}
            
            }        [DataContract]
            public class ExtProperties
            {
                [DataMember]
                public int relay{get; set;}
                [DataMember]
                public string Number{get; set;}
            }
      

  4.   


    这样改就可以了,因为你的json字段名称和实体类字段名称不一样就为null了
      

  5.   

    json.net的性能要比.net framework的高很多,现在mvc4.0的web api多已经使用json.net了
      

  6.   

    using System.Web.Script.Serialization;
    using System.Runtime.Serialization.Json;public static T JsonDeserialize<T>(string jsonString)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
            {
                return (T)ser.ReadObject(ms);
            }
        }

        List<jsonOrder> list = JsonDeserialize<List<jsonOrder>>(str);
      

  7.   

    4楼的已经贴出来了,关键是lz定义的类方式不对,正确如下:        public class Person
            {            
                public string Id{get; set;} 
                
                public string name{get; set;} 
              
                public ExtProperties extProperties{get; set;}
             
            }
     
           
            public class ExtProperties
            {           
                public int relay{get; set;}
               
                public string Number{get; set;}
            }
    再用那组件解析json数据为对象即可!