Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何绑定动态属性?_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 如何绑定动态属性?

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;

我正在解析一些包含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; }
} 
公共类数据
{
公开列表照片{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;
    }