2012-10-30 128 views
1

我在標題提到,JSON是不完全反序列化,因爲一些對象具有在控制器中的合適的值(I發送JSON來一個asp.net MVC 4控制器),但與性能出現問題存儲在數組中的對象(準確的說,這個問題有數據顯示)嵌套JSON反序列化不完全

我有以下類:沒有正確的價值

public class Node 
{ 
    [JsonProperty("id")] 
    public int? Id { get; set; } 
    [JsonProperty("name")] 
    public string Name { get; set; } 
    [JsonProperty("type")] 
    public string Type { get; set; } 


    private Data _data = new Data(); 

    [JsonProperty("data")] 
    public Data Data { get; set; } 

    private List<Adjacency> _adjacencies = new List<Adjacency>(); 
    [JsonProperty("adjacencies")] 
    public List<Adjacency> Adjacencies 
    { 
     get { return _adjacencies; } 
     set { _adjacencies = value; } 
    } 


    private List<Instance> _dependendStates = new List<Instance>(); 

    public List<Instance> DependentStates 
    { 

     get { return _dependendStates; } 
     set { _dependendStates = value; } 
    } 
} 

public class Data 
{ 
    [JsonProperty("$posX")] 
    public decimal PosX { get; set; } 
    [JsonProperty("$posY")] 
    public decimal PosY { get; set; } 
} 

public class Adjacency 
{ 
    [JsonProperty(PropertyName = "nodeTo")] 
    public string NodeTo { get; set; } 
    [JsonProperty(PropertyName = "data")] 
    public AdjData Data { get; set; } 
    //doesn't contain definition for automated transitions 
} 

public class AdjData 
{ 
    [JsonProperty(PropertyName = "$labelid")] 
    public string LabelId { get; set; } 
    [JsonProperty(PropertyName = "$labeltext")] 
    public string Label { get; set; } 
    [JsonProperty(PropertyName = "$type")] 
    public string Type { get; set; }  
} 

我突出的字段。

The null problem http://img19.imageshack.us/img19/530/36976913.png

JSON的是這樣的:

{ 
    "result":[ 
     { 
     "id":"100", 
     "name":"Start", 
     "data":{ 
      "$posX":-100, 
      "$posY":-100, 
      "$deployed":true, 
      "$color":"#000000", 
      "$selected":"true" 
     }, 
     "adjacencies":[ 
      { 
       "nodeTo":"188", 
       "data":{ 
        "$type":"labeled_arrow", 
        "$labelid":"Label Name", 
        "$labeltext":"Label Name" 
       } 
      } 
     ] 
     }, 
     { 
     "id":"188", 
     "name":"Second ", 
     "data":{ 
      "$dim":20, 
      "$color":"#000000", 
      "$selected":"true" 
     }, 
     "adjacencies":[ 

     ] 
     } 
    ], 
    "smName":"gftrds" 
} 

我在整理了這一點,因爲我不理解或看到的問題是一個問題。

回答

1

免責聲明:我是不是能精確地再現這一點,因爲在我的情況Label和反序列化LabelId精細,雖然Type沒有,所以我anwser可能不會解決你所遇到的問題。

在我的情況下,我只能將"$type":"labeled_arrow"屬性反序列化,如果它不是第一個 - 如果它出現在"$labelid":"Label Name""$labeltext":"Label Name"之後,它可以正常工作。

奇怪的是,如果$type財產在JSON稱爲type和C#簡稱爲[JsonProperty(PropertyName = "type")],它會反序列化精細,不分先後順序的。

在你的情況下,你不能反序列化LabelLabelId要麼,所以這可能是你的問題是由別的東西造成的。爲了排除我建議,它可能會支付嘗試修改一些屬性名稱的(可能是剛剛起飛的$),看看他們所造成的屬性不正確地反序列化。

+0

我想過取出$,看它是否會引起任何問題,但什麼都沒有改變(我很高興它沒有,因爲我真的需要它那裏)。 我打算去看看它。謝謝。 –

+0

好的,我重新檢查了這個問題,$實際上是問題所在。謝謝。 –

+0

沒問題。樂於幫助。 –

1

我經歷了同樣的問題,但在我而言這是涉及到如何將數據正在從客戶端發送。確保AJAX請求使用正確的標題和格式。例如:

 dataType: 'json', 
     contentType: 'application/json; charset=UTF-8', 
     data: JSON.stringify({ 
      MemberId : '123', 
      UserName: '456', 
      Parameters: [ 
       { Value : 'testing' }, 
       { Value : 'test2' } 
      ] 
     }),