我正在编写一个反序列化器回调方法来解析C#silverlight中的一些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文件解析为已定义对象的数组。
答案 0 :(得分: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 :(得分: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*/);
}
答案 2 :(得分: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;
}