如何绑定动态属性

本文关键字:动态 属性 绑定 何绑定 | 更新日期: 2023-09-27 18:12:16

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

  • "0": "some data",
  • "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以及数据合约反序列化器。

所以我取

List<Items> as List<dynamic>. 

但问题是键名仍然为"0","1",这将无法绑定到我的xaml UI端。

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

如何绑定动态属性

使用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;
    }

试试这个解析:

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; }
}