我的课程看起来像这样:
[DataContract]
public class Student {
[DataMember(Name="name")]
public string Name {get;set}
[DataMember(Name="classes")]
public List<Class> Classes {get; set;}
public Dictionary<string, object> StudentRawDictionary {get; set;}
}
[DataContract]
public class Class {
[DataMember(Name="id")]
public int Id {get;set;}
public Dictionary<string, object> ClassRawDictionary {get; set;}
}
这就是我反序列化的方式:
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
var settings = new DataContractJsonSerializerSettings {UseSimpleDictionaryFormat = true};
var serializer = new DataContractJsonSerializer(typeof(Student), settings);
var student = (Student) serializer.ReadObject(ms);
ms.Seek(0, SeekOrigin.Begin);
serializer = new DataContractJsonSerializer(typeof(Dictionary<string, object>), settings);
var results = (Dictionary<string, object>) serializer.ReadObject(ms);
student.RawDictionary = results;
return student;
}
我的JSON看起来像这样:
{
'name' : 'John Doe',
'email' : 'johndoe@example.com',
'classes': [
{
'id': 1,
'name': 'History'
},
{
'id': 2,
'name': 'Music'
}
]
}
问题:
如您所见,我的JSON可能包含明确列出和注释DataMember
之外的字段(例如电子邮件)。我想要的是把所有的字段,无论它们是&#34;列出&#34;或不,在xRawDictionary
对象中。这适用于Student
对象 - 我可以毫无问题地获得Name
字段。但是我没有考虑如何将所有字段添加到ClassRawDictionary
。
只有.net而没有其他外部依赖项才可能吗? (我正在编写一个开源库,所以我希望尽可能减少依赖关系,以便我不能使用Json.net。)