簡體   English   中英

在 C# 中重新映射 JSON 參數

[英]Remap JSON parameter in c#

我有一個 json 字符串,我想將參數 AOID 重新映射到 BOID

{  'ID': '56',  'AOID': 'o747'}

我嘗試了以下但我只是得到了相同的輸出

    public class CustomContractResolver : DefaultContractResolver
    {
        private Dictionary<string, string> PropertyMappings { get; set; }

        public CustomContractResolver()
        {
            this.PropertyMappings = new Dictionary<string, string>
            {
            { "AOID", "BOID"},
            };
        }

        protected override string ResolvePropertyName(string propertyName)
        {
            Console.WriteLine(propertyName);
            string resolvedName = null;
            var resolved = this.PropertyMappings.TryGetValue(propertyName, out resolvedName);
            return (resolved) ? resolvedName : base.ResolvePropertyName(propertyName);
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {

        string product22 = "{  'ID': '56',  'AOID': '747'}";

        string json =
            JsonConvert.SerializeObject(product22,
                new JsonSerializerSettings { ContractResolver = new CustomContractResolver() }
                );
        Console.WriteLine(json);
    }

我明白了

"{  'ID': '56',  'AOID': '747'}"

但我期待得到

"{  'ID': '56',  'BOID': '747'}"

對 C# 非常陌生....

提前致謝

您可以將進入一個類的對象反序列化,然后將其映射到另一個類。

例如,您的第一個類將包含 Id 和 AOID。 這也是您反序列化的類。 第二個類將是 ID 和 BOID,這將是您將其映射到的類。

鑒於您的product22值已經序列化,您可以對這樣的字符串進行簡單的替換:

    private void button2_Click(object sender, EventArgs e)
    {
        string product22 = "{  'ID': '56',  'AOID': '747'}";

        string json = product22.Replace("'AOID'", "'BOID'");

        Console.WriteLine(json);
    }

希望能幫助到你。

您需要將一個對象傳遞給您的 SerializeObject 方法調用。 您可以像這樣為您的測試構建一個匿名對象......

object inputObject = new {ID = "56", AOID = "747"};

如果你更新你的按鈕點擊事件,你應該得到你正在尋找的結果......

private void button2_Click(object sender, EventArgs e)
{
    object inputObject = new {ID = "56", AOID = "747"}; // create anonymous object

    string json =
    JsonConvert.SerializeObject(inputObject,
    new JsonSerializerSettings { ContractResolver = new CustomContractResolver() });
    Console.WriteLine(json);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM