我有以下型号:

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" }
    ]
}

09-11 18:01