C#JSON&;正在分析

本文关键字:amp C#JSON | 更新日期: 2023-09-27 18:27:15

我成功地设置了一个简单的webClient,它在WP8应用程序中调用我的WCF服务。该方法非常好地激发,并且通过OpenReadCompleted事件返回数据。

我现在想做的是转换返回的JSON数据,并填充一个对象集合。

这是webClient代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var webClient = new WebClient();
    var uri = new Uri("urlGoesHere");
    webClient.OpenReadCompleted += webClient_OpenReadCompleted;
    webClient.OpenReadAsync(uri);
}

这是OpenReadComplete代码:

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    var sr = new StreamReader(e.Result);
    var data = sr.ReadToEnd();
    //ToDo - Create a collection of SightingTypes and populate
    sr.Close();
    sr.Dispose();
}

这就是我想要填充的POCO/对象:

public class SightingType
{
    public string Name { get; set; }
    public string BrandId { get; set; }
}

更新

当我将鼠标悬停在数据上时,我可以看到以下内容(缩写):

{'"Message'":null,'"Status'":0,'"CurrentVersionNumber'":26,'"SightingTypes'":[{'"BrandId'":'"brands''/1'",'"DestinationUserIds'":['"users''/33'"],'"Id'":'"SightingTypes''/8'",'"IsDeleted'":false,'"IsEnabled'":true,'"Name'":'"Michael Johnson'"}

我特别感兴趣的是名称品牌标识

C#JSON&;正在分析

您可以使用Json.Net和以下类(您的根对象不是SightingType)。。。。

var result = JsonConvert.DeserializeObject<Response>(data);  

public class SightingType
{
    public string BrandId { get; set; }
    public List<string> DestinationUserIds { get; set; }
    public string Id { get; set; }
    public bool IsDeleted { get; set; }
    public bool IsEnabled { get; set; }
    public string Name { get; set; }
}
public class Response
{
    public object Message { get; set; }
    public int Status { get; set; }
    public int CurrentVersionNumber { get; set; }
    public List<SightingType> SightingTypes { get; set; }
}

另请参阅此站点,在那里您可以获得json字符串的类定义

我建议您查看JSON.Net。它附带了一个JSON序列化程序,可以满足您的需求:

SightingType deserializedSightingType = JsonConvert.DeserializeObject<SightingType>(data);

使用此代码将JSON解析为POCO

        //get the JSON string into 'responseText'
        // Deserialize response Message to JsonResponse
        var serializer = new JavaScriptSerializer();
        jsonResponse = serializer.Deserialize<JsonResponse>(responseText);
        // where in <> put your class 'SightingType'

您需要添加资源System.Web.Extensions.dll才能使用JavaScriptSerializer类