如何绑定动态属性?

时间:2015-09-11 14:18:48

标签: c# wpf xaml data-binding

我正在解析一些包含Json对象的Json数据

  • " 0":"一些数据" ,
  • " 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>. 

但问题是键名仍然是&#34; 0&#34; ,&#34; 1&#34;这无法绑定到我的xaml UI端。

有没有办法将这个动态数据绑定到UI?

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:-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; }
}

这对我有用;]