从C#中的对象(反序列化json)中检索数据

本文关键字:json 检索 反序列化 数据 对象 | 更新日期: 2023-09-27 18:25:40

我有一个JSON字符串,我正在尝试使用C#解析它。我使用JsonConvert将我的数据序列化为JSON字符串。

这是我的示例JSON字符串:

{"names": ["John", "Joe", "Jack"], "nationality": "American"}

我能够使用JsonConvert.DeserializeObject(x); 将此字符串反序列化为对象

问题是,我不知道如何使用C#从对象中读取。有人能帮我吗?

从C#中的对象(反序列化json)中检索数据

public class People
{
  [JsonProperty("names")]
  public List<string> Names;
  [JsonProperty("nationality")]
  public string Nationality;
}

其他答案在技术上是正确的,但使用JsonPropertyAttribute是一种普遍接受的惯例。然后使用JsonConvert:

var people = JsonConvert.DeserializeObject<People>(x);

更好的方法是定义一个具有预期结构的类,然后使用JavaScriptSerializer对其进行反序列化:

class NameSet
{
    public IList<string> names { get; set; }
    public string nationality { get; set; }
}
var serializer = new JavaScriptSerializer();
var nameset  = serializer.Deserialize<NameSet>(jsonString);

创建这样的自定义类:

public class CustomData
{
    public string[] Names { get; set; }
    public string Nationality { get; set; }
    public CustomData() { }
}

并使用JsonConvert来反序列化yo这种类型的对象:

CustomData data = JsonConvert.DeserializeObject<CustomData>(x);

以下内容就足够了:

public class PeopleGroup {
    public string[] names { get; set; }
    public string nationality { get; set }
}
var myObject = JsonConvert.DeserializeObject<PeopleGroup>(x);

基本上,您可以创建一个强类型对象,并直接将其取消序列化。

如果您不想真正定义一个类,可以使用匿名类型:

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);

您应该使用dataContractJsonSerializer类,它更快,最重要的是它是.Net Framework的内置类。我将在我的下一个命令中发布解决方案,在该命令中,我们如何使用DataContractJsonSerializer类。现在我不能发布解决方案,因为我的最终网络太慢了:(,但我今天会发布。