我是C#和JSON的新手。我有一个具有以下结构的JSON:
{"person1":[{"name":"Bobby"},{"age":25},{"height":178},{"hobby":"piano"}],"person2":[{"name":"Tyler"},{"age":29},{"height":185}, ,{"hobby":"basketball"}],"person3":[{"name":"Mike"},{"age":30},{"height":192},{"hobby":"football"}]}
我们可以看到它不是纯粹的Object / List文件JSON结构,因为person [number]之后的以下参数是一个列表。我尝试了很多方法,但我仍然无法操纵这些数据(我对JSON的理解不够深入。你能告诉我如何通过使用Dictionary / Database或任何最容易做的方法来访问这些数据。
我已使用以下方法将JSON文件读入字符串:
using (StreamReader file = File.OpenText(url))
如果我的JSON文件位于:url = @MyJSONPath
在这之后我不知道该怎么做了,这种结构对我来说很奇怪。
目前我目前的进展是:
非常感谢您的回复。但是我尝试使用[数据合约]但是当我复制到我的CS时程序不接受你的代码。 (我使用的是Visual Studio 2013) 无论如何,我确实找到了一个名为Json2Csharp的网站。所以它帮助我生成了我的代码:
public class Person1
{
public string name { get; set; }
public int? age { get; set; }
public int? height { get; set; }
public string hobby { get; set; }
}
public class Person2
{
public string name { get; set; }
public int? age { get; set; }
public int? height { get; set; }
public string hobby { get; set; }
}
public class Person3
{
public string name { get; set; }
public int? age { get; set; }
public int? height { get; set; }
public string hobby { get; set; }
}
public class RootObject
{
public List<Person1> person1 { get; set; }
public List<Person2> person2 { get; set; }
public List<Person3> person3 { get; set; }
}
你能告诉我这两种声明方式的区别。之后,我如何获得对象的属性。 例如:我希望列出所有&#34; name&#34;进入列表框并操纵它们的值。
答案 0 :(得分:0)
如果在你的json对象中你总是有person1,person2和person3,你可以使用以下结构:
[DataContract]
public class RootObject
{
[DataMember(Name = "person1")]
public Person[] Person1 { get; set; }
[DataMember(Name = "person2")]
public Person[] Person2 { get; set; }
[DataMember(Name="person3")]
public Person[] Person3 { get; set; }
}
[DataContract]
public class Person
{
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "age")]
public int Age { get; set; }
[DataMember(Name = "height")]
public int Height { get; set; }
[DataMember(Name = "hobby")]
public string Hobby { get; set; }
}
更新:
当然,您必须将System.Runtime.Serialization引用添加到项目中才能运行此代码。您不必使用[DataContract]
属性,它只是允许您保留C#命名约定。
我不理解您的其余问题(更新后) - 当您反序列化对象时,您可以像访问任何其他对象一样访问它的属性,所以
deserializedObject.Person1.Select(p => p.Name)
将为您获取Person1数组的所有名称。
另外,如果你格式化它,我会更容易分析JSON(我使用Notepad ++):
{
"person1": [{
"name": "Bobby"
}, {
"age": 25
}, {
"height": 178
}, {
"hobby": "piano"
}
],
"person2": [{
"name": "Tyler"
}, {
"age": 29
}, {
"height": 185
}, , {
"hobby": "basketball"
}
],
"person3": [{
"name": "Mike"
}, {
"age": 30
}, {
"height": 192
}, {
"hobby": "football"
}
]
}
答案 1 :(得分:0)
Dictionary<string, object> values = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
希望它有效!