Json 我的 class 的正确结构是什么?
Json what is proper structure for my class?
我设法让我的 json 返回,但我无法将它返回到我的 class 说原因它的数组。但是我正在使用我从书本上学习的反序列化方法助手。并且应该工作。
所以我需要回答的问题是我的 class 需要如何正确构造才能将 json 解码为城市对象。
我正在通过有效的方法获取我的 json
/// <summary>
/// Utility function to get/post WCFRESTService
/// </summary>
/// <param name="methodRequestType">RequestType:GET/POST</param>
/// <param name="methodName">WCFREST Method Name To GET/POST</param>
/// <param name="bodyParam">Parameter of POST Method (Need serialize to JSON before passed in)</param>
/// <returns>Created by David</returns>
private async Task<string> WCFRESTServiceCall(string methodRequestType, string methodName, string bodyParam = "")
{
string ServiceURI = "/launchwebservice/index.php/webservice/" + methodName;
HttpClient httpClient = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(methodRequestType == "GET" ? HttpMethod.Get : HttpMethod.Post, ServiceURI);
if (!string.IsNullOrEmpty(bodyParam))
{
request.Content = new StringContent(bodyParam, Encoding.UTF8, "application/json");
}
HttpResponseMessage response = await httpClient.SendAsync(request);
string jsongString = await response.Content.ReadAsStringAsync();
return jsongString;
}
那我就用反序列化的方法
public static class Helpers
{
public static List<T> Deserialize<T>(this string SerializedJSONString)
{
var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString);
return stuff;
}
}
我是按以下方式调用上面的
string jsonresult = await WCFRESTServiceCall("GET", "cinema_city");
var data = jsonresult.Deserialize<Citys>();
var dialog = new MessageDialog(jsonresult);
await dialog.ShowAsync();
当我检查 jsonresult
时,它确实返回 json 但由于某种原因在方括号中。
这给了我以下错误:
我的Class城市如下
public class City
{
public string id { get; set; }
public string timing_title { get; set; }
}
public class Citys
{
public List<City> city { get; set; }
}
编辑以显示 jason 数据
{"city":[{"id":"5521","timing_title":"Lahore"},{"id":"5517","timing_title":"Karachi"},{"id":"5538","timing_title":"Islamabad"},{"id":"5535","timing_title":"Rawalpindi"},{"id":"5518","timing_title":"Hyderabad"},{"id":"5512","timing_title":"Faisalabad"},{"id":"8028","timing_title":"Gujranwala"},{"id":"8027","timing_title":"Gujrat"}]}
编辑以显示错误
dezerilize 事件出错?
你的 classes json 将是:
对于城市 class
{ id: "some string", timing_title:"some string" }
对于城市 class:
{ city: [ { id: "some string", timing_title:"some string" }, ... ] }
我相信你在 属性 名称中有错字 - 现在是城市,但实际上应该是城市。
我看到的另一个问题是您将城市 class 和列表混合在一起。它们不一样,您不能 serialize/deserialize 它们彼此。
更正 json 列表为:
[ { id: "some string", timing_title:"some string" } ,... ]
将它与上面的 class 城市进行比较。
UPDATE: 再次阅读后,您正在尝试将 List 反序列化为 Citys。这就是你的例外所说的。可能这就是你想说的:
public static class Helpers
{
public static T Deserialize<T>(this string SerializedJSONString)
{
var stuff = JsonConvert.DeserializeObject<T>(SerializedJSONString);
return stuff;
}
}
string jsonresult = await WCFRESTServiceCall("GET", "cinema_city");
var data = jsonresult.Deserialize<Citys>();
var dialog = new MessageDialog(jsonresult);
await dialog.ShowAsync();
我设法让我的 json 返回,但我无法将它返回到我的 class 说原因它的数组。但是我正在使用我从书本上学习的反序列化方法助手。并且应该工作。
所以我需要回答的问题是我的 class 需要如何正确构造才能将 json 解码为城市对象。
我正在通过有效的方法获取我的 json
/// <summary>
/// Utility function to get/post WCFRESTService
/// </summary>
/// <param name="methodRequestType">RequestType:GET/POST</param>
/// <param name="methodName">WCFREST Method Name To GET/POST</param>
/// <param name="bodyParam">Parameter of POST Method (Need serialize to JSON before passed in)</param>
/// <returns>Created by David</returns>
private async Task<string> WCFRESTServiceCall(string methodRequestType, string methodName, string bodyParam = "")
{
string ServiceURI = "/launchwebservice/index.php/webservice/" + methodName;
HttpClient httpClient = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(methodRequestType == "GET" ? HttpMethod.Get : HttpMethod.Post, ServiceURI);
if (!string.IsNullOrEmpty(bodyParam))
{
request.Content = new StringContent(bodyParam, Encoding.UTF8, "application/json");
}
HttpResponseMessage response = await httpClient.SendAsync(request);
string jsongString = await response.Content.ReadAsStringAsync();
return jsongString;
}
那我就用反序列化的方法
public static class Helpers
{
public static List<T> Deserialize<T>(this string SerializedJSONString)
{
var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString);
return stuff;
}
}
我是按以下方式调用上面的
string jsonresult = await WCFRESTServiceCall("GET", "cinema_city");
var data = jsonresult.Deserialize<Citys>();
var dialog = new MessageDialog(jsonresult);
await dialog.ShowAsync();
当我检查 jsonresult
时,它确实返回 json 但由于某种原因在方括号中。
这给了我以下错误:
我的Class城市如下
public class City
{
public string id { get; set; }
public string timing_title { get; set; }
}
public class Citys
{
public List<City> city { get; set; }
}
编辑以显示 jason 数据
{"city":[{"id":"5521","timing_title":"Lahore"},{"id":"5517","timing_title":"Karachi"},{"id":"5538","timing_title":"Islamabad"},{"id":"5535","timing_title":"Rawalpindi"},{"id":"5518","timing_title":"Hyderabad"},{"id":"5512","timing_title":"Faisalabad"},{"id":"8028","timing_title":"Gujranwala"},{"id":"8027","timing_title":"Gujrat"}]}
编辑以显示错误
dezerilize 事件出错?
你的 classes json 将是:
对于城市 class
{ id: "some string", timing_title:"some string" }
对于城市 class:
{ city: [ { id: "some string", timing_title:"some string" }, ... ] }
我相信你在 属性 名称中有错字 - 现在是城市,但实际上应该是城市。
我看到的另一个问题是您将城市 class 和列表混合在一起。它们不一样,您不能 serialize/deserialize 它们彼此。
更正 json 列表为:
[ { id: "some string", timing_title:"some string" } ,... ]
将它与上面的 class 城市进行比较。
UPDATE: 再次阅读后,您正在尝试将 List 反序列化为 Citys。这就是你的例外所说的。可能这就是你想说的:
public static class Helpers
{
public static T Deserialize<T>(this string SerializedJSONString)
{
var stuff = JsonConvert.DeserializeObject<T>(SerializedJSONString);
return stuff;
}
}
string jsonresult = await WCFRESTServiceCall("GET", "cinema_city");
var data = jsonresult.Deserialize<Citys>();
var dialog = new MessageDialog(jsonresult);
await dialog.ShowAsync();