2012-07-13 193 views
2

我正在写一个反序列化器回调方法来解析C#silverlight中的一些Json响应。Json Deserializer读取对象到数组

但问题是响应是由一堆对象构成的,而不是数组形式。

具体而言,通常当我们想从一个JSON解析的东西,如果这是对象的列表,它看起来像这样一些Json的可视化工具:

Json Array

,我们可以这样做:

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ObjType[])); 
ObjType[] response = (ObjType[])jsonSerializer.ReadObject(stream); 

但现在我有一个结构看起来像这样JSON文件:

enter image description here

在这种情况下,我不认为我可以解析它到一个数组,因为对象是单独的而不是数组结构。

JSON文件的样本是:

[ 
    { 
     "Name":"Mike", 
     "Gender":"male", 
    }, 
    { 
     "Name":"Lucy", 
     "Gender":"Female ", 
    }, 
    { 
     "Name":"Jack", 
     "Gender":"Male", 
    } 
] 

所以我想知道如果有什么办法可以分析这种JSON文件来定义对象的数组。

+1

能否请您分享样本JSON作为文本 – 2012-07-13 18:47:36

+0

您可以使用JSON.NET到deserealize JSON到anonmous对象的HTTP ://stackoverflow.com/questions/6904825/c-sharp-deserialize-json-to-anonymous-object – 2012-07-13 19:01:13

+0

@raman对不起,我无法分享Json fil因为这不是公共资源。但我可以尝试在同一结构中创建一些假数据 – 2012-07-13 19:02:58

回答

3

这对我的作品

string json = @"[ 
    { 
     ""Name"":""Mike"", 
     ""Gender"":""male"" 
    }, 
    { 
     ""Name"":""Lucy"", 
     ""Gender"":""Female "" 
    }, 
    { 
     ""Name"":""Jack"", 
     ""Gender"":""Male"" 
    } 
]"; 
MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)); 

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ObjType[])); 
ObjType[] response = (ObjType[])jsonSerializer.ReadObject(stream); 

-

[DataContract] 
public class ObjType 
{ 
    [DataMember] 
    public string Name; 
    [DataMember] 
    public string Gender; 
} 
1
[System.Runtime.Serialization.DataContractAttribute()] 
public partial class RootClass 
{ 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public string Name; 

    [System.Runtime.Serialization.DataMemberAttribute()] 
    public string Gender; 
} 

    static void Main(string[] args) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(RootClass[])); 
     serializer.ReadObject(/*Input stream w/ JSON*/); 

    } 
+0

示例输入流:新FileStream(“E:\\ sample.txt”,FileMode.Open) – 2012-07-13 19:20:22

+0

请注意,在您的示例中还有额外的逗号 – 2012-07-13 19:22:04

0
public static T JSONDeserialize<T>(string json) 
     { 
      T obj = default(T); 
      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) 
      { 
       obj = Activator.CreateInstance<T>(); 
       DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); 
       obj = (T)serializer.ReadObject(ms); 
       ms.Close(); 
      }`enter code here` 
      return obj; 
     }