将 mongodb 文档序列化为域对象
Serialize mongodb document to domain object
我正在尝试将 mondodb 文档读入我的域 class (Company
),但其中一个属性出现错误。
错误消息如下:
"Expected a nested document representing the serialized form of a
OrgNumber value, but found a value of type String instead"
对象看起来像这样:
public class OrgNumber
{
public string Value { get; private set; }
...
private OrgNumber() { }
public OrgNumber(string value) {
Value = value;
}
}
public class Company
{
public string Name { get; private set; }
public OrgNumber OrgNumber { get; private set; }
...
private Company() { }
public Company(string name, OrgNumber orgNumber)
{
Name = name;
OrgNumber = orgNumber;
}
}
mongodb 文档如下所示:
{
"name": "Company name",
"orgNumber": "1234-5678",
}
我正在阅读文档并将其直接映射到我的域模型中:
var collection = _mongoDb.GetCollection<Company>("Companies");
var result = await collection.Find(c => c.CompanyId == companyId).SingleOrDefaultAsync();
如何正确地将 OrgNumber
的字符串表示形式转换为正确的类型 OrgNumber
?
您可以创建自己的继承自 SerializerBase<T>
的序列化程序
public class OrgNumberSerializer : SerializerBase<OrgNumber>
{
public override OrgNumber Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var serializer = BsonSerializer.LookupSerializer(typeof(string));
var data = serializer.Deserialize(context, args);
return new OrgNumber(data.ToString());
}
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, OrgNumber value)
{
var serializer = BsonSerializer.LookupSerializer(typeof(string));
serializer.Serialize(context, value.Value);
}
}
然后需要使用以下行进行全局注册:
BsonSerializer.RegisterSerializer(typeof(OrgNumber), new OrgNumberSerializer());
您可以找到更多详情here
我正在尝试将 mondodb 文档读入我的域 class (Company
),但其中一个属性出现错误。
错误消息如下:
"Expected a nested document representing the serialized form of a OrgNumber value, but found a value of type String instead"
对象看起来像这样:
public class OrgNumber
{
public string Value { get; private set; }
...
private OrgNumber() { }
public OrgNumber(string value) {
Value = value;
}
}
public class Company
{
public string Name { get; private set; }
public OrgNumber OrgNumber { get; private set; }
...
private Company() { }
public Company(string name, OrgNumber orgNumber)
{
Name = name;
OrgNumber = orgNumber;
}
}
mongodb 文档如下所示:
{
"name": "Company name",
"orgNumber": "1234-5678",
}
我正在阅读文档并将其直接映射到我的域模型中:
var collection = _mongoDb.GetCollection<Company>("Companies");
var result = await collection.Find(c => c.CompanyId == companyId).SingleOrDefaultAsync();
如何正确地将 OrgNumber
的字符串表示形式转换为正确的类型 OrgNumber
?
您可以创建自己的继承自 SerializerBase<T>
public class OrgNumberSerializer : SerializerBase<OrgNumber>
{
public override OrgNumber Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var serializer = BsonSerializer.LookupSerializer(typeof(string));
var data = serializer.Deserialize(context, args);
return new OrgNumber(data.ToString());
}
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, OrgNumber value)
{
var serializer = BsonSerializer.LookupSerializer(typeof(string));
serializer.Serialize(context, value.Value);
}
}
然后需要使用以下行进行全局注册:
BsonSerializer.RegisterSerializer(typeof(OrgNumber), new OrgNumberSerializer());
您可以找到更多详情here