我有两段代码
代码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
它可以有任何键,所以我不能为它定义一个类。我发布这个问题是因为我有一个问题,经过调查我发现我无法解析字典。因此,我将我的问题简化为一个更简单的问题,以便你们可以提供您的意见