Tôi cho rằng ý bạn là một lớp EmailAddress như sau:
[BsonSerializer(typeof(EmailAddressSerializer))]
public class EmailAddress
{
private string _value;
public EmailAddress(string value)
{
_value = value;
}
public string Value
{
get { return _value; }
}
}
Tôi đã sử dụng một thuộc tính để liên kết lớp EmailAddress với một bộ tuần tự hóa tùy chỉnh, có thể được triển khai như sau:
public class EmailAddressSerializer : BsonBaseSerializer
{
public override object Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
if (bsonReader.GetCurrentBsonType() == BsonType.Null)
{
bsonReader.ReadNull();
return null;
}
else
{
var value = bsonReader.ReadString();
return new EmailAddress(value);
}
}
public override void Serialize(BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
{
if (value == null)
{
bsonWriter.WriteNull();
}
else
{
var emailAddress = (EmailAddress)value;
bsonWriter.WriteString(emailAddress.Value);
}
}
}
Bạn không thể tuần tự hóa Địa chỉ Email làm tài liệu gốc (vì nó không phải là tài liệu ...). Nhưng bạn có thể sử dụng Địa chỉ Email được nhúng trong một số tài liệu khác. Ví dụ:
public class Person
{
public int Id { get; set; }
public EmailAddress EmailAddress { get; set; }
}
Bạn có thể kiểm tra cái nào bằng cách sử dụng mã như sau:
var person = new Person { Id = 1, EmailAddress = new EmailAddress("[email protected]") };
var json = person.ToJson();
var rehyrdated = BsonSerializer.Deserialize<Person>(json);
Tài liệu JSON / BSON kết quả là:
{ "_id" : 1, "EmailAddress" : "[email protected]" }