2011-10-20 107 views
0

我有一个类无法反序列化JSON正确

[DataContract] 
    public class restaurant 
    { 
     public restaurant() {} 

     public restaurant(string Address, string Description, int Id, float Latitude, float Longitude, string Name, 
      string OpeningHours, string Phone, string Sandwich, string Price, string UpdatedAt , string Website, float Score, int RatingCount, string ThumbnailUrl) 
     { 
      address = Address; 
      description = Description; 
      id = Id; 
      latitude = Latitude; 
      longitude = Longitude; 
      name = Name; 
      opening_hours = OpeningHours; 
      phone = Phone; 
      sandwich = Sandwich; 
      price = Price; 
      updated_at = UpdatedAt; 
      website = Website; 
      score = Score; 
      rating_count = RatingCount; 
      thumbnail_url = ThumbnailUrl; 

     } 


     [DataMember] 
     public string address { get; set; } 
     [DataMember] 
     public string description { get; set; } 
     [DataMember] 
     public int id { get; set; } 
     [DataMember] 
     public float latitude { get; set; } 
     [DataMember] 
     public float longitude { get; set; } 
     [DataMember] 
     public string name { get; set; } 
     [DataMember] 
     public string opening_hours { get; set; } 
     [DataMember] 
     public string phone { get; set; } 
     [DataMember] 
     public string sandwich { get; set; } 
     [DataMember] 
     public string price { get; set; } 
     [DataMember] 
     public string updated_at { get; set; } 
     [DataMember] 
     public string website { get; set; } 
     [DataMember] 
     public float score { get; set; } 
     [DataMember] 
     public int rating_count { get; set; } 
     [DataMember] 
     public string thumbnail_url { get; set; } 

    } 

和JSON字符串:

string json = @"{""restaurant"":{""address"":""blablabla"",""description"":""blablabla"",""id"":6,""latitude"":12.1,""longitude"":-12.3, 
            ""name"":""blablabla"",""opening_hours"":""Mon-Fri: 12pm-2:30pm\r\n     6:30pm-11pm \r\nSat: 12-3:30pm/6:30-11pm \r\nSun: 12-9pm"",""phone"":""123456"",""price"":""1"", ""sandwich"":""blablabla"",""updated_at"":""2011-10-10T21:40:17Z"", 
            ""website"":""blablabla"",""score"":4.3,""ratings_count"":3,""thumbnail_url"":""http://website.com/1.jpg""}}"; 

我想使用此代码反序列化:

restaurant LR; 

      using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
      { 
       DataContractJsonSerializer serializer = 
         new DataContractJsonSerializer(typeof(restaurant)); 

       LR= (restaurant)serializer.ReadObject(ms); 
      } 

但它不工作!奇怪的是,当我尝试反序列化它时,它不显示错误(所以json是好的,如果我故意拧上json,它会在运行时显示错误),但餐厅对象是空的。我究竟做错了什么?

回答

1

根据您的餐厅类,我认为这是一个会被你的代码进行反序列化JSON的:

string json = @"{""address"":""blablabla"",""description"":""blablabla"",""id"":6,""latitude"":12.1,""longitude"":-12.3, 
           ""name"":""blablabla"",""opening_hours"":""Mon-Fri: 12pm-2:30pm\r\n     6:30pm-11pm \r\nSat: 12-3:30pm/6:30-11pm \r\nSun: 12-9pm"",""phone"":""123456"",""price"":""1"", ""sandwich"":""blablabla"",""updated_at"":""2011-10-10T21:40:17Z"", 
           ""website"":""blablabla"",""score"":4.3,""ratings_count"":3,""thumbnail_url"":""http://website.com/1.jpg""}"; 

我不能谈论的日期,但。有时他们抛出文化的原因。

编辑:为了让你的序列化JSON,你可以创建一个外部类休息。像,

public class rest 
{ 
    public restaurant restaurant { get; set; } 
} 

那么你的反序列化的代码也将需要更改为:

rest LR; 

using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
{ 
    DataContractJsonSerializer serializer = 
        new DataContractJsonSerializer(typeof(rest)); 

    LR = (rest)serializer.ReadObject(ms); 
} 

BIG注意 如果你能容纳像一些[餐饮] S

{"restaurant":[{""address"":"blah1", ...}, {""address"":"blah2", ...}]} 

,那么您可能需要将餐厅的成员休息类为阵列如下:

public class rest 
{ 
    public restaurant[] restaurant { get; set; } 
} 
+0

它的工作!谢谢!我如何修改我的代码,以便反序列化器将反序列化json? JSON是外部的,所以我不能修改它!你能帮我吗? – Alex

+0

@BadescuAlexandru:我编辑了我的答案,告诉你如何处理json –

+0

非常感谢,它非常完美! – Alex