3

好的,我对此有些困难。

我的 JSON 就像

{ "names" : [ {"name":"bla"} , {"name":"bla2"} ] }

我试图做这个教程,但是由于 JSON 不同,它没有用。

我必须在这个方法里面放什么?我不知道是创建一个包含我的列表的“包装”类还是直接使用 JsonObject 更好。你能给我一个片段吗?我是 C# 的新手。

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        DataContractJsonSerializer ser = null;
        try
        {
           ???
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

提前致谢!

4

3 回答 3

6

使用Json.Net(支持 Windows Phone)

string json = @"{ ""names"" : [ {""name"":""bla""} , {""name"":""bla2""} ] }";

var dict = (JObject)JsonConvert.DeserializeObject(json);
foreach (var obj in dict["names"])
{
    Console.WriteLine(obj["name"]);
}

或者,如果您想以类型安全的方式使用它

var dict = JsonConvert.DeserializeObject<RootClass>(json);
foreach (var obj in dict.names)
{
    Console.WriteLine(obj.name);
}


public class RootClass
{
    public MyName[] names { get; set; }
}

public class MyName
{
    public string name { get; set; }
}
于 2012-05-01T19:33:53.023 回答
1

使用 .NET DataContractJsonSerializer,您需要定义一个映射 json 对象的类。像这样的东西(如果我没记错的话):

/// <summary>
/// 
/// </summary>
[DataContract]
public class Result
{
    /// <summary>
    /// 
    /// </summary>
    [DataMember(Name = "name")]
    public string Name
    { get; set; }
}

 /// <summary>
/// 
/// </summary>
[DataContract]
public class Results
{
    /// <summary>
    /// 
    /// </summary>
    [DataMember(Name = "names")]
    public List<Result> Names
    { get; set; }
}

然后在您的事件处理程序中:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Results));
var results = (Results)serializer.ReadObject(SOME OBJECT HOLDING JSON, USUALLY A STREAM);
于 2012-05-01T19:43:00.820 回答
1

我通常使用 JSON.NET ( http://james.newtonking.com/projects/json-net.aspx ),所以我的代码可能会有所不同。

对于列表内容,我会选择一个具有这样 name 属性的类:

public class NameClass {
    public string name { get;set; }
}

然后您应该能够使用 JSON.NET a 反序列化List<NameClass>

List<NameClass> result = JsonConvert.Deserialize<List<NameClass>>(jsonString);

这是我脑子里写的,所以也许它不能通过复制和粘贴来编译,但它应该可以作为示例使用。

于 2012-05-01T19:29:40.267 回答