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'"}
我特别感兴趣的是名称和品牌标识。
您可以使用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类