比方说,这是2个BSON文件反序列化嵌套和非结构化BsonDocument(MongoDB的C#驱动程序)
{
"_id": "...",
"name": "Test1",
"sub": {
"street": "134 Fake Street",
"city": "NoWhere"
}
},
{
"_id": "...",
"name": "Test2",
"sub": {
"height": "10",
"width": "20",
"sub2": {
"type": "something"
}
}
}
,其中第一级是一个结构化的类,但分层次可以完全非结构化并且还可以有一个集合嵌套文件深几层。
我该如何将此文档反序列化为C#类?我所看到的所有样本都假设嵌套文档中有一些结构。
下面的类提供了一个错误:
public class Report
{
[BsonId]
public ObjectId _id { get; set; }
public string name { get; set; }
public BsonDocument sub { get; set; }
}
Type 'MongoDB.Bson.BsonString' with data contract name '...' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
编辑
我试图做的可能是完全无感。仅使用一个BsonDocument并在没有结构化类的情况下手动处理所有内容是更好的主意?
尝试使用动态keyword.This这样你的非结构化数据将被映射到在运行一个补充C#对象time.http://msdn.microsoft.com/en-us/library/dd264736.aspx –
我不认为动态是由官方驱动程序正确支持。我自己也在和这个问题作斗争,但是我得出的结论是我的文件并不像我想象的那样特殊。你能描述你有什么架构差异吗?或者仅仅是你的文件不平衡。不同之处在于模式差异意味着完全不同的结构(不同类型),而不均匀可能意味着存在稀疏文档。是否有可能描述超级文档是所有变体的超集?我也使用字典<,>大量用于完全可变的objs – cirrus
问题是我只能定义第一级结构,而没有嵌套对象。原因是每个用户都可以定义他们自己的文档结构,并且会有几个“文档模板”的集合。所以强类型的对象绝对不在。我是C#的新手,但在我看来,字典也出来了,因为它仍然是结构化的。 –