C# Json对象反序列化到c模型
我有一个来自第三方Web服务的json返回,格式如下。我不担心它对某个对象的反序列化。我的模型结构应该是什么C# Json对象反序列化到c模型,c#,json,C#,Json,我有一个来自第三方Web服务的json返回,格式如下。我不担心它对某个对象的反序列化。我的模型结构应该是什么 {"123":{"Name":"test1","Address":"add 1"} ,"1412":{"Name":"test2","Address":"add 2"} ,"4123":{"Name":"test3","Address":"add 3"}} 我是用这个工具得到的。您会注意到,C类型不能以数字开头,因此它们前面的类型无效。但是你可以随意给它们重命名。这应该让你开始了解结构
{"123":{"Name":"test1","Address":"add 1"}
,"1412":{"Name":"test2","Address":"add 2"}
,"4123":{"Name":"test3","Address":"add 3"}}
我是用这个工具得到的。您会注意到,C类型不能以数字开头,因此它们前面的类型无效。但是你可以随意给它们重命名。这应该让你开始了解结构
我知道您无法控制JSON,但它的格式选择似乎很糟糕。您有三种基本相同的类型。他们应该使用一个数组。那就简单多了。Thanx@mason你给我一个线索让我找到。我终于找到了解决办法。。我想我也应该和你们分享 我的问题的答案是:
var jobj = (JObject)JsonConvert.DeserializeObject(json);
var items = jobj.Children()
.Cast<JProperty>()
.Select(j=>new
{
Id=j.Name,
Name= (string)j.Value["Name"],
Address= (string)j.Value["Address"]
})
.ToList();
使用该工具,您可以简单地:
public class NameAddress
{
public string Name { get; set; }
public string Address { get; set; }
}
public class RootObject
{
[JsonProperty("123")]
public NameAddress { get; set; }
[JsonProperty("1412")]
public NameAddress { get; set; }
[JsonProperty("4123")]
public NameAddress { get; set; }
}
我知道这是老生常谈,但对于那些寻找答案的人,我有一个解决办法。使用Json.Net,我将结构反序列化为一个带有字符串键和对象值的字典,从而破解了这个难题。解决方案如下:
public class Item {
public string Name { get; set; }
public string Address { get; set; }
}
Dictionary<string, Item> itemList =
JsonConvert.DeserializeObject<Dictionary<string, Item>>( myJsonString );
我验证了上面的代码在您的示例中有效。如果不能保证生成的字典中的项名称或键不是唯一的,则可能可以使用Json.Net支持的另一种类型的集合。我将从一个类开始,如:public class ContactData{int id;string name;string address;}请查看。我也有类似的问题。这个解决方案对我来说非常有效。@spots这应该是答案。@MareInfinitus请解释,说它不正确并不能告诉我它有什么不正确的地方。根据我在问题中读到的内容,OP正在寻找一种生成对象图的方法。为三个格式相同的json对象提供三种类型。这似乎不是OP想要的,至少对我来说是这样。OP问他反序列化对象的结构应该是什么。我提供了如何反序列化它的一对一示例。我指出,这三种相同的类型是由于提供的JSON的结构。提供者似乎打算将它们作为单独的类型,否则将使用一个数组。虽然这看起来可行,但您应该看看Erik的答案,因为它为您提供了一个可以重用的良好对象,并且反序列化只需要一行代码。Json.NET是一个很棒的库。
public class Item {
public string Name { get; set; }
public string Address { get; set; }
}
Dictionary<string, Item> itemList =
JsonConvert.DeserializeObject<Dictionary<string, Item>>( myJsonString );