2012-07-13 75 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; 
     }