2012-12-24 22 views
0

我有一個JSON字符串,類似於以下:的Json反序列化空引用

{ 
    EventID: 4, 
    CalendarEntry : 
    { 
     CalendarID: 4, 
     AreaID: 41, 
     Name: "My Event Entry #4" 
    } 
} 

我反序列化頂層結構成在代碼中的事件實體,其正確添加(4)〜編號:

public class Event 
{ 
    [DataMember(Name = "EventID")] 
    public int Id { get; set; } 
} 

但是,當我將Calendar作爲屬性添加到Event時,兩個Id始終返回null?

public class EventCalendar 
{ 
    [DataMember(Name = "CalendarID")] 
    public int Id { get; set; } 

    [DataMember(Name = "AreaID")] 
    public int AreaId { get; set; } 

    [DataMember(Name = "Name")] 
    public string Name { get; set; } 
} 

public class Event 
{ 
    [DataMember(Name = "EventID")] 
    public int Id { get; set; } 

    [DataMember(Name = "CalendarEntry")] 
    public EventCalendar Calendar { get; set; } 
} 

什麼錯誤我是,如果我從任一個ID或areaID表示刪除[數據成員]屬性,正好給它的名字,因爲它來自我的JSON字符串,它帶回正確的結果。但是,我不想在我的實體中使用相同的名稱,並且期望[DataMember]能夠正確恢復數據?

我在.Net 4.5中使用JsonSerializer。

我也試過這與Newtonsoft.Json和它做同樣的事情?

回答

0
{ 
    EventID: 4, 
    CalendarEntry : 
    { 
     CalendarID: 4, 
     AreaID: 41, 
     Name: "My Event Entry #4" 
    } 
} 

也許: - ?

{ 
    EventID: 4, 
    CalendarEntry : 
    [{ 
     CalendarID: 4, 
     AreaID: 41, 
     Name: "My Event Entry #4" 
    }] 
} 
0

這對我來說工作得很好。驗證您的輸入JSON字符串是否有效。 在這個例子中,我使用System.Web.Script.SerializationSystem.Runtime.Serialization

public static void Main (string[] args) 
{ 
     JavaScriptSerializer ser = new JavaScriptSerializer();   
     string json = ser.Serialize(new Event { 
      Id = 4, 
      Calendar = new EventCalendar { 
       Id = 5, 
       AreaId = 55, 
       Name = "Some name" 
      } 
     }); 

     Console.WriteLine(string.Format("json = {0}", json)); 
     Event fromJsonEvent = ser.Deserialize<Event>(json); 

     Console.WriteLine(string.Format ("Event.Id = {0}", fromJsonEvent.Id)); 
     Console.WriteLine(string.Format ("Event.EventCalendar.Name = {0}", fromJsonEvent.Calendar.Name)); 
     Console.WriteLine(string.Format ("Event.EventCalendar.Id = {0}", fromJsonEvent.Calendar.Id)); 
    } 
} 

public class EventCalendar 
{ 
    [DataMember(Name = "CalendarID")] 
    public int Id { get; set; } 

    [DataMember(Name = "AreaID")] 
    public int AreaId { get; set; } 

    [DataMember(Name = "Name")] 
    public string Name { get; set; } 
} 

public class Event 
{ 
    [DataMember(Name = "EventID")] 
    public int Id { get; set; } 

    [DataMember(Name = "CalendarEntry")] 
    public EventCalendar Calendar { get; set; } 
} 
+0

我是從服務,我需要工作,我不擁有控制權(來自第三方)假設它的數據。 JSON解析正確,開發者確實在所有ID上返回int。只是很奇怪,json.net和序列化都不會推斷正確的對象屬性? – JadedEric

+0

json字符串(來自第三方服務)的外觀如何? – nekman