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();