C# 使用.Net反序列化Json
我有一个以这种格式返回JSON的外部供应商APIC# 使用.Net反序列化Json,c#,.net,json,deserialization,C#,.net,Json,Deserialization,我有一个以这种格式返回JSON的外部供应商API {"3":{"id":1,"name":"Scott Foo","age":55}, "59":{"id":2,"name":"Jim Morris","age":62}} 我正在尝试使用以下代码对其进行反序列化 [DataContract] public class Name { [DataMember] public int id { get; set; } [DataMember] public stri
{"3":{"id":1,"name":"Scott Foo","age":55},
"59":{"id":2,"name":"Jim Morris","age":62}}
我正在尝试使用以下代码对其进行反序列化
[DataContract]
public class Name
{
[DataMember]
public int id { get; set; }
[DataMember]
public string name { get; set; }
[DataMember]
public int age{ get; set; }
}
要反序列化的代码是
List<Name> nameList = Deserialize<List<Name>>(temp);
List nameList=反序列化(临时);
其中反序列化定义为
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
ms.Close();
ms.Dispose();
return obj;
}
publicstatict反序列化(字符串json)
{
T obj=Activator.CreateInstance();
MemoryStream ms=新的MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractJsonSerializer=新的DataContractJsonSerializer(obj.GetType());
obj=(T)serializer.ReadObject(ms);
Close女士();
Dispose女士();
返回obj;
}
名称列表中返回的对象的计数为零。任何关于如何在.Net中反序列化此JSON的想法(即不使用JSON.Net或任何此类第三方dll)?理论上,您的根对象是这样的
public class root
{
public Name 3;
public Name 59;
}
但是3和59不是有效的c#变量/字段/属性名称(它们也是动态的)。因此,不能将其反序列化为类
我知道您不想使用Json.Net或任何类似的第三方DLL,但这就是我使用
以及输出
3==>Scott Foo
59==>Jim Morris
理论上,你的根对象是这样的
public class root
{
public Name 3;
public Name 59;
}
但是3和59不是有效的c#变量/字段/属性名称(它们也是动态的)。因此,不能将其反序列化为类
我知道您不想使用Json.Net或任何类似的第三方DLL,但这就是我使用
以及输出
3==>Scott Foo
59==>Jim Morris
这里有一个选择
//using System.Runtime.Serialization.Json;
public static dynamic Deserialize(string content)
{
return new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(content);
}
var f = Deserialize(json);
List<Name> list = new List<Name>();
foreach(var item1 in (Dictionary<string, object>) f)
{
Dictionary<string, object> item2 = (Dictionary<string, object>) item1.Value;
list.Add( new Name(){
id = (int) item2["id"],
name = (string) item2["name"],
age = (int) item2["age"]
});
}
//使用System.Runtime.Serialization.Json;
公共静态动态反序列化(字符串内容)
{
返回新的System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(内容);
}
var f=反序列化(json);
列表=新列表();
foreach(字典f中的var item1)
{
Dictionary item2=(Dictionary)item1.Value;
list.Add(新名称(){
id=(int)项2[“id”],
名称=(字符串)项2[“名称”],
年龄=(int)项2[“年龄”]
});
}
这里有一个选项
//using System.Runtime.Serialization.Json;
public static dynamic Deserialize(string content)
{
return new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(content);
}
var f = Deserialize(json);
List<Name> list = new List<Name>();
foreach(var item1 in (Dictionary<string, object>) f)
{
Dictionary<string, object> item2 = (Dictionary<string, object>) item1.Value;
list.Add( new Name(){
id = (int) item2["id"],
name = (string) item2["name"],
age = (int) item2["age"]
});
}
//使用System.Runtime.Serialization.Json;
公共静态动态反序列化(字符串内容)
{
返回新的System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(内容);
}
var f=反序列化(json);
列表=新列表();
foreach(字典f中的var item1)
{
Dictionary item2=(Dictionary)item1.Value;
list.Add(新名称(){
id=(int)项2[“id”],
名称=(字符串)项2[“名称”],
年龄=(int)项2[“年龄”]
});
}
你想要的id、name和age属性之前的“3”和“59”是怎么回事?更可能的是反序列化
-因为这不是一个列表/JSON数组,它是一个JSON对象,有两个属性,分别名为“3”和“59”。“3”和“59”我认为是从第三方返回的某种行id,“3”和“59”是怎么回事在您想要的id、name和age属性前面加上“59”?更可能是反序列化的
-因为这不是一个列表/JSON数组,它是一个JSON对象,有两个属性,分别命名为“3”和“59”。“3”和“59”我认为是从第三方返回的某种行id