1

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

这是我的示例 JSON 字符串:

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

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

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

4

6 回答 6

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);
于 2013-07-31T22:47:33.813 回答
1

像这样创建一个自定义类:

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

    public CustomData() { }
}

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

CustomData data = JsonConvert.DeserializeObject<CustomData>(x);
于 2013-07-31T22:48:46.293 回答
1

以下应该足够了:

public class PeopleGroup {

    public string[] names { get; set; }
    public string nationality { get; set }

}

var myObject = JsonConvert.DeserializeObject<PeopleGroup>(x);

基本上,您创建一个强类型对象,并直接反序列化到它。

于 2013-07-31T22:48:52.897 回答
1
public class People
{
  [JsonProperty("names")]
  public List<string> Names;

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

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

var people = JsonConvert.DeserializeObject<People>(x);
于 2013-07-31T22:50:47.067 回答
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);
于 2013-07-31T22:52:26.813 回答
0

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

于 2013-10-29T06:51:19.040 回答