我有以下型号:
Public class UserInfo{
public string Id{get;}
public Dictionary<string, string> Metadata{ get; }
}
当我尝试将新的userinfo添加到数据库时,该数据库具有:
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
作为我的集合元数据中的键名,使用:Dbcontext.myCollection.InsertOne(data);
我收到以下错误消息:
mongodb.bson.bsonserializationexception:'元素名称
“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”不是
有效“.”
我可以看出问题在于字典有一个url作为键,因为当我从字典中删除这个键时,它工作得很好,当我在字典外使用这个值时,它也工作得很好。
我怎样才能克服这个问题?
最佳答案
我不确定您是否可以直接将字典序列化到MongoDB中,但有一个解决方案。您可以将字典转换为keyvaluepairs列表,它应该可以工作。
例如
public class UserInfo
{
[BsonId]
public ObjectId Id { get; set; }
public List<KeyValuePair<string, string>> Metadata { get; set; }
}
并填充要序列化为MongoDB的对象。
var userInfo = new UserInfo
{
Metadata = new List<KeyValuePair<string, string>>()
};
userInfo.Metadata.Add(new KeyValuePair<string, string>(
@"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "01"));
var userInfoCollection = mongoDatabase.GetCollection<UserInfo>("Users");
userInfoCollection.InsertOne(userInfo);
它应该发出以下文档
{
"_id" : ObjectId("5a678a3845acb9547c1ab4f9"),
"Metadata" :
[
{ "k" : "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "v" : "01" }
]
}