繁体   English   中英

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

[英]Retrieving data from an Object(deserialized json) in C#

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

这是我的示例JSON字符串:

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

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

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

更好的方法是定义一个具有预期结构的类,然后使用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反序列化此类型的对象:

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

基本上,您将创建一个强类型的对象,然后直接对其进行反序列化。

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

  [JsonProperty("nationality")]
  public string Nationality;
}

其他答案在技术上是正确的,但是使用JsonPropertyAttribute是普遍接受的约定。 然后使用JsonConvert

var people = JsonConvert.DeserializeObject<People>(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类。现在我无法发布解决方案,因为最终网络太慢了:(,但是我今天将发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM