C# 如何绑定动态属性?
我正在解析一些包含Json对象的Json数据C# 如何绑定动态属性?,c#,wpf,xaml,data-binding,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;
- “0”:“一些数据”
- “1”:“其他数据”李>
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; }
}
公共类数据
{
公开列表照片{get;set;}
}
公共类项目
{
公共字符串\uuu无效\u名称\uuuu 3{get;set;}
公共字符串\uuu无效\u名称\uuuu 0{get;set;}
公共字符串\uuu无效\u名称\uuuu 2{get;set;}
}
此数据无法正确反序列化。我尝试了JSONConvert和DataContract反序列化程序
所以我拿了
List<Items> as List<dynamic>.
以列表的形式列出。
但问题是键名仍然是“0”、“1”,这将无法绑定到我的xaml UI端
有没有办法将此动态数据绑定到UI?尝试此解析:
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; }
}
var jsonSerializer=newJavaScriptSerializer();
var jsonString=/*您的json字符串*/
var yourList=jsonSerializer.Deserialize(jsonString);
公共课你的课
{
[JsonProperty(PropertyName=“0”)]
公共字符串零{get;set;}
[JsonProperty(PropertyName=“1”)]
公共字符串One{get;set;}
}
这对我有用;] 使用DataContractJsonSerializer,您可以在DataMemberAttributes上设置Name属性,以使用不同于C#中属性名称的名称序列化对象:
[DataContract]
公共类数据
{
[数据成员]
公开列表照片{get;set;}
}
[数据合同]
公共类项目
{
[数据成员(Name=“3”)]
公共字符串三{get;set;}
[DataMember(Name=“0”)]
公共字符串零{get;set;}
[数据成员(Name=“2”)]
公共字符串二{get;set;}
}
公共静态void TestJson()
{
var json=“{\'photos\”:[{\'0\':\'some data\',\'2\':\'other data\',\'3\':\'other data\'}];
var serializer=newdatacontractjsonserializer(typeof(Data));
Data Data=serializer.ReadObject(新的MemoryStream(Encoding.UTF8.GetBytes(json))作为数据;
}
我不知道你在问什么。你能显示JSON字符串吗?这可能会帮助我们找到答案。你能发布你的XAML吗?您是如何尝试绑定Items对象的属性的?属性名称不能以数字开头!我给出了序列化程序的示例解决方案,而不是模型。无论如何,我已经编辑了模型,因此它使用了正确的anotation;]谢谢你,泰勒。你说得对。您的解决方案很有用:)
[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;
}