2

我正在编写一个反序列化器回调方法来解析 C# silverlight 中的一些 Json 响应。

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

具体来说,通常当我们想从 json 中解析某些东西时,如果那是一个对象列表,它在某些 Json 可视化工具中会如下所示:

json数组

我们可以这样做:

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

但现在我有了结构如下所示的 Json 文件:

在此处输入图像描述

在这种情况下,我认为我不能将其解析为数组,因为对象是单独的而不是数组结构。

Json 文件的示例是:

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

所以我想知道是否有任何方法可以将这种 Json 文件解析为已定义对象的数组。

4

3 回答 3

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;
}
于 2012-07-13T19:17:22.993 回答
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*/);

    }
于 2012-07-13T19:17:13.173 回答
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;
        }
于 2016-02-22T07:02:19.160 回答