从json windows phone解析字典

时间:2013-04-04 07:12:33

标签: c# windows-phone-8

我有两段代码

代码1

string json = @"{""properties"":{""name"":""carl""}}";
try
{
    MemoryStream stream = GetMemoryStreamFromString(json);
    Type type = typeof(Person);
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
    object obj = serializer.ReadObject(stream);
    Debug.WriteLine(obj);
    Person person = obj as Person;
}
catch (Exception ee)
{
    Debug.WriteLine(ee.Message);
}

//And my classes
[DataContract]
public class Person
{
    [DataMember]
    public Property properties { set; get; }

    public Person() { }
}

[DataContract]
public class Property
{
    [DataMember]
    public string name { set; get; }

    public Property() { }
}



代码2

string json = @"{""properties"":{""name"":""carl""}}";
try
{
    MemoryStream stream = GetMemoryStreamFromString(json);
    Type type = typeof(Person);
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
    object obj = serializer.ReadObject(stream);
    Debug.WriteLine(obj);
    Person person = obj as Person;
}
catch (Exception ee)
{
    Debug.WriteLine(ee.Message);
}

//And my class
[DataContract]
public class Person
{
    [DataMember]
    public Dictionary<string,string> properties { set; get; }

    public Person() { }
}

Code1工作正常,但Code2给了我例外。这是日志

  

无法对数据协定类型“ScrollViewExample.Person”进行反序列化,因为成员“属性”不是公共的。将该成员公开将修复此错误。或者,您可以将其设置为内部,并使用程序集上的InternalsVisibleToAttribute属性以启用内部成员的序列化 - 有关更多详细信息,请参阅文档。请注意,这样做会产生一定的安全隐患。

这里的问题是我没有为properties定义的结构,它可以有任何键,所以我不能为它定义一个类。我发布这个问题是因为我有一个problem,经过调查我发现我无法解析字典。所以我把我的问题变成了一个更简单的问题,以便你们可以提供你的意见

1 个答案:

答案 0 :(得分:1)

不幸的是DataContractJsonSerializer期望你的json数据为

  {"properties":[{"Key":"Name","Value":"Valorie"},{"Key":"Month","Value":"May"},{"Key":"Year","Value":"2013"}]}

我认为使用Json.NET是解析json

的好主意