第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何使用 c# 在駱駝情況下在 mongo 中保存文檔?

如何使用 c# 在駱駝情況下在 mongo 中保存文檔?

C#
躍然一笑 2021-11-28 19:44:26
如何在駱駝情況下在mongo中保存文檔?現(xiàn)在我試圖保存這個(gè):  "parent_template_id": "5aa7822ba6adf805741c5722",  "type": "Mutable",  "subject": {    "workspace_id": "5-DKC0PV8U",    "additional_data": {      "boardId": "149018",    }但是 boardId 在 db 中轉(zhuǎn)換為 board_id(蛇形盒)。這是我在 c# 中的領(lǐng)域:[BsonElement("additional_data")][BsonIgnoreIfNull]public Dictionary<string, string> AdditionalData { get; set; }
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

您需要注冊一個(gè)新的序列化程序來處理您的 senario,幸好這個(gè)庫是非??蓴U(kuò)展的,所以您只需要編寫一些需要擴(kuò)展的部分。


因此,首先您需要?jiǎng)?chuàng)建一個(gè)Serializer將您的字符串鍵寫為下劃線大小寫的:


public class UnderscoreCaseStringSerializer : StringSerializer

{

    public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, string value)

    {

        value = string.Concat(value.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower();


        base.Serialize(context, args, value);

    }

}

現(xiàn)在我們有了一個(gè)可以使用的序列化器,我們可以在 bson 序列化器注冊表中注冊一個(gè)新的字典序列化器,并將我們的新序列化器UnderscoreCaseStringSerializer用于序列化密鑰:


var customSerializer =

    new DictionaryInterfaceImplementerSerializer<Dictionary<string, string>>

        (DictionaryRepresentation.Document, new UnderscoreCaseStringSerializer(), new ObjectSerializer());


BsonSerializer.RegisterSerializer(customSerializer);

就是這樣......


internal class MyDocument

{

    public ObjectId Id { get; set; }


    public string Name { get; set; }


    public Dictionary<string, string> AdditionalData { get; set; }

}


var collection = new MongoClient().GetDatabase("test").GetCollection<MyDocument>("docs");


var myDocument = new MyDocument

{

    Name = "test",

    AdditionalData = new Dictionary<string, string>

    {

        ["boardId"] = "149018"

    }

};


collection.InsertOne(myDocument);


// { "_id" : ObjectId("5b74093fbbbca64ba8ce9d0e"), "name" : "test", "additional_data" : { "board_id" : "149018" } }

您可能還想考慮使用 aConventionPack來處理您的字段名稱使用下劃線的約定,這只是意味著您不需要用BsonElement屬性亂扔類,它只是按照約定工作。


public class UnderscoreCaseElementNameConvention : ConventionBase, IMemberMapConvention

{

    public void Apply(BsonMemberMap memberMap)

    {

        string name = memberMap.MemberName;

        name = string.Concat(name.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower();

        memberMap.SetElementName(name);

    }

}


var pack = new ConventionPack();

pack.Add(new UnderscoreCaseElementNameConvention());


ConventionRegistry.Register(

    "My Custom Conventions",

    pack,

    t => true);


查看完整回答
反對 回復(fù) 2021-11-28
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號