2015-09-11 60 views
0

我解析包含JSON對象爲如何綁定動態屬性?

  • 「0」 一些JSON數據: 「一些數據」,
  • 「1」: 「其他數據」。

其轉換爲C#類後,代碼變換爲:

public class Data 
{ 
    public List<Items> photos { get; set; } 
} 

public class Items 
{ 
    public string __invalid_name__3 { get; set; } 
    public string __invalid_name__0 { get; set; } 
    public string __invalid_name__2 { get; set; } 
} 

該數據將不能正確反序列化。我已經嘗試了Jsoncovert以及DataContract解串器。

所以我把

List<Items> as List<dynamic>. 

但問題是按鍵的名稱仍然爲「0」,「1」,這將不能夠綁定到我的XAML UI結束。

有什麼辦法將這個動態數據綁定到UI?

+0

我不明白你在問什麼 –

+1

你可以顯示JSON字符串,這可能有助於我們的答案。 –

+0

你可以發佈你的XAML嗎?你是如何嘗試綁定Items對象的屬性的? –

回答

2

使用DataContractJsonSerializer你可以設置你的DataMemberAttributes Name屬性序列化比的名字不同名稱的對象你屬性在C#中:

[DataContract] 
    public class Data 
    { 
     [DataMember] 
     public List<Items> photos { get; set; } 
    } 

    [DataContract] 
    public class Items 
    { 
     [DataMember(Name = "3")] 
     public string Three { get; set; } 
     [DataMember(Name="0")] 
     public string Zero { get; set; } 
     [DataMember(Name = "2")] 
     public string Two { get; set; } 
    } 

    public static void TestJson() 
    { 
     var json = "{\"photos\":[{\"0\":\"some data\",\"2\":\"other data\",\"3\":\"another data\"}]}"; 

     var serializer = new DataContractJsonSerializer(typeof(Data)); 
     Data data = serializer.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json))) as Data; 
    } 
+0

謝謝@tyler。你讓我正確。 Ur解決方案很有用:) – prdp89

-2

試試這個解析:

var jsonSerializer = new JavaScriptSerializer(); 
var jsonString = /*your json string*/ 

var yourList = jsonSerializer.Deserialize<List<YourClass>>(jsonString); 

public class YourClass 
{ 
    [JsonProperty(PropertyName = "0")] 
    public string Zero { get; set; } 

    [JsonProperty(PropertyName = "1")] 
    public string One { get; set; } 
} 

這是爲我工作]

+2

屬性名稱不能以數字開頭! –

+0

我給出了串行器的示例解決方案,而不是模型。無論如何,我已經編輯模型,所以它使用正確的anotation;] – dlght