使用 MongoDB Bson 序列化器序列化对象图
我一直在使用 MongoDB Bson 序列化器,使用以下代码:
class Program
{
public class myValue
{
public int Id = 0;
public string Label = "";
}
public class myValueMap : Dictionary<string, myValue>
{
}
public class myProdData
{
public myValueMap Mapping { get; set; }
}
public class mySystemPosition
{
public string Text { get; set; }
public myProdData ProdData { get; set; }
}
static void Main(string[] args)
{
BsonClassMap.RegisterClassMap<mySystemPosition>();
BsonClassMap.RegisterClassMap<myProdData>();
BsonClassMap.RegisterClassMap<myValueMap>();
BsonClassMap.RegisterClassMap<myValue>();
var o = new mySystemPosition()
{
ProdData = new myProdData()
{
Mapping = new myValueMap()
{
{"123", new myValue() {Id = 1, Label = "Item1"}},
{"345", new myValue() {Id = 2, Label = "Item2"}},
}
}
};
var bson = o.ToBson();
var text = Encoding.ASCII.GetString(bson);
}
}
但是我似乎无法序列化 myProdData.Mapping....
我需要在中配置 MongoDB Bson 序列化器吗一种特殊的方式,使这项工作?
I've been playing a little with the MongoDB Bson serializer, using the following piece of code:
class Program
{
public class myValue
{
public int Id = 0;
public string Label = "";
}
public class myValueMap : Dictionary<string, myValue>
{
}
public class myProdData
{
public myValueMap Mapping { get; set; }
}
public class mySystemPosition
{
public string Text { get; set; }
public myProdData ProdData { get; set; }
}
static void Main(string[] args)
{
BsonClassMap.RegisterClassMap<mySystemPosition>();
BsonClassMap.RegisterClassMap<myProdData>();
BsonClassMap.RegisterClassMap<myValueMap>();
BsonClassMap.RegisterClassMap<myValue>();
var o = new mySystemPosition()
{
ProdData = new myProdData()
{
Mapping = new myValueMap()
{
{"123", new myValue() {Id = 1, Label = "Item1"}},
{"345", new myValue() {Id = 2, Label = "Item2"}},
}
}
};
var bson = o.ToBson();
var text = Encoding.ASCII.GetString(bson);
}
}
however I don't seem to be able to get the myProdData.Mapping serialized....
Do I need to configure the MongoDB Bson serializer in a special way, to make this work?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您不需要自定义序列化,则无需使用
BsonClassMap.RegisterClassMap
(文档)。您的所有课程都将根据默认规则进行反序列化。
另外,我对您的示例进行了一些更改以使其正常工作(我已将
myValueMap
类替换为 Dictionary):这是控制台输出(格式良好):
您可以使用
测试您的序列化ToJson()
扩展方法,以便查看所有正确性,然后根据需要使用ToBson()
。You no need to use
BsonClassMap.RegisterClassMap
if you no need custom serializtion(documentation).All your classes will be desirialzied according to default rules.
Also i am changed your example a little bit to get it work(i've replaces
myValueMap
class with Dictionary):Here is console output(just well formatted):
You can test your serializtion using
ToJson()
extention method, in order to view that all correct and after that useToBson()
if need.问题是 myValueMap 派生自 Dictionary。这会产生 AutoMap 方法无法处理的类。
我建议你直接使用字典,就像安德鲁在他的回复中所做的那样。
The problem is that myValueMap derives from Dictionary. That results in a class that the AutoMap method can't handle.
I recommend you just use the Dictionary directly, as Andrew did in his reply.
不幸的是 myValueMap 是一个我无法轻易更改的对象,但事实证明,创建您自己的(反)序列化器非常容易......
Ufortunately the myValueMap is an object that I can't easily change, however it turns out, that's pretty easy to create your own (de)serializer....