从json转换为c#类对象

时间:2013-12-31 14:51:04

标签: c# json windows-phone-7.1

我尝试将json转换为c#类对象,导致我的最后一步将所有数据放入本地db。我把这些数据像一个大字符串一样没问题,所以Url输入效果不错,但这不是我的目标。

这是json数据,这里我们有两个对象

[{"id":"1","category":"1","name":"good 1","prize":"12.3","prize2":"13.4","elements":"row,column,paper","secid":"2131","description":"nice","quality":"best","dateofcoming":"2013-12-20 18:08:50","date":"2013-12-20 00:00:00"},
{"id":"2","category":"2","name":"good","prize":"14.3","prize2":"15.4","elements":"up,down,left","secid":"2132","description":"nc","quality":"best","dateofcoming":"2013-12-20 18:10:55","date":"2013-12-20 00:00:00"}]

我尝试通过这种方式在书中找到:

  private void getBookData()
    {
        // we creating the request details to the site which give us 
        // back the json data 
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("here is my adress");
       request.Accept = "and header";
        // starting the request
        request.BeginGetResponse(callback_with_food_info, request);
    }

    private void callback_with_food_info(IAsyncResult ar)
    {

        HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
        // we get the response
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);

        DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(ListOfObjects));

        Stream responseStream = response.GetResponseStream();

        ListOfObjects listOfobj = (ListOfObjects)deserializer.ReadObject(responseStream);
        String fsdfsdf = "how how how";



    }

并在我们ReadObject

的行中
 ListOfObjects listOfobj = (ListOfObjects)deserializer.ReadObject(responseStream);

我得到异常“System.InvalidCastException”,我的List类看起来像这样,它是由http://json2csharp.com/

创建的
  public class DetailsOfObject
   {  
    public string id { get; set; }
    public string category { get; set; }
    public string name { get; set; }
    public string prize { get; set; }
    public string prize2 { get; set; }
    public string elements { get; set; }
    public string secid { get; set; }
    public string description { get; set; }
    public string quality { get; set; }
    public string dateofcoming { get; set; }
    public string date { get; set; }
}

public class ListOfObjects 
{
    public DetailsOfObject list {get; set;}
}

有关如何最终转换此json数据的任何建议

1 个答案:

答案 0 :(得分:1)

您需要将数据属性添加到模型

 [DataContract]
 public class DetailsOfObject
 {
    [DataMember] 
    public string id { get; set; }

并更改反序列化行

List<DetailsOfObject> listOfobj = (List<DetailsOfObject>)deserializer.ReadObject(responseStream);