我有一个课程User,我需要在Web服务中使用它们.
然后问题是如果我尝试序列化Id那种类型BsonObjectId,我看到它有一个空属性,有一个空属性,依此类推......
我按顺序编写了这个解决方法,这是一个很好的解决方案吗?
public partial class i_User
{
[BsonId(IdGenerator = typeof(BsonObjectIdGenerator))]
[NonSerialized]
public BsonObjectId _id;
public String Id
{
get
{
return this._id.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以保持_Id,BsonObjectId但我在该属性的Web上发送字符串表示Id.
另一种解决方案是使用 StringObjectIdGenerator
public partial class i_User
{
[BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
public String id;
}
Run Code Online (Sandbox Code Playgroud)
但是看到MongoDB将存储string到数据库而不是ObjectId.
在Web服务和/或客户端服务器(Flash + C#)等序列化环境中工作的最佳方法是什么?
Joe*_*ler 98
如果我理解正确,您希望以Id字符串形式访问该属性,但将其Id保存为ObjectIdMongoDB中的.这可以使用BsonRepresentationwith 来完成BsonId.
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
Run Code Online (Sandbox Code Playgroud)
细节可以在这里找到.
如果你想用类映射来做 - 这是这样做的方法:
BsonClassMap.RegisterClassMap<i_User>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance));
});
Run Code Online (Sandbox Code Playgroud)