我正在尝试使用C#解析JSON字符串。我已经使用JsonConvert将我的数据序列化为JSON字符串。
以下是我的示例JSON字符串:
{"names": ["John", "Joe", "Jack"], "nationality": "American"}
我可以使用JsonConvert.DeserializeObject(x);
问题是,我不知道如何使用C#从对象中读取。有人可以帮我吗?
答案 0 :(得分:1)
更好的方法是定义具有预期结构的类,然后使用JavaScriptSerializer对其进行反序列化:
class NameSet
{
public IList<string> names { get; set; }
public string nationality { get; set; }
}
var serializer = new JavaScriptSerializer();
var nameset = serializer.Deserialize<NameSet>(jsonString);
答案 1 :(得分:1)
创建一个这样的自定义类:
public class CustomData
{
public string[] Names { get; set; }
public string Nationality { get; set; }
public CustomData() { }
}
使用JsonConvert反序列化这种类型的对象:
CustomData data = JsonConvert.DeserializeObject<CustomData>(x);
答案 2 :(得分:1)
以下内容应该足够了:
public class PeopleGroup {
public string[] names { get; set; }
public string nationality { get; set }
}
var myObject = JsonConvert.DeserializeObject<PeopleGroup>(x);
基本上,您创建一个强类型对象,并直接反序列化。
答案 3 :(得分:1)
public class People
{
[JsonProperty("names")]
public List<string> Names;
[JsonProperty("nationality")]
public string Nationality;
}
其他答案在技术上是正确的,但使用JsonPropertyAttribute
是一个普遍接受的惯例。然后使用JsonConvert
:
var people = JsonConvert.DeserializeObject<People>(x);
答案 4 :(得分:1)
如果您不想实际定义类,可以使用匿名类型:
string json = "{\"names\": [\"John\", \"Joe\", \"Jack\"], \"nationality\": \"American\"}";
// Just defining the structure of the anonymous type
var x = new { names = new string[0], nationality = string.Empty };
x = JsonConvert.DeserializeAnonymousType(json, x);
答案 5 :(得分:0)
你应该使用dataContractJsonSerializer类,它更快,最重要的是它是内置的.Net Framework类。我将在我的下一个文章中发布解决方案,我们如何使用DataContractJsonSerializer类。现在我无法发布解决方案,因为在我的结束网太慢了:(,但我今天会发布。