0

我设法设置了一个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\"}

我特别感兴趣的是NameBrandId

4

3 回答 3

2

您可以使用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 字符串的类定义

于 2013-08-10T18:58:20.160 回答
2

我建议查看JSON.Net。它带有一个 JSON 序列化器,应该可以满足您的需求:

SightingType deserializedSightingType = JsonConvert.DeserializeObject<SightingType>(data);
于 2013-08-10T18:46:22.497 回答
1

使用此代码将 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 类

于 2013-08-10T18:45:21.040 回答