【问题标题】:Remap JSON parameter in c#在 C# 中重新映射 JSON 参数
【发布时间】:2019-12-23 04:21:50
【问题描述】:

我有一个 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# 非常陌生....

提前致谢

【问题讨论】:

  • 在您的代码中,您正在调用 SerializeObject 方法并向其传递 JSON 字符串,但 SerializeObject 方法用于将对象转换为 JSON 字符串,而 Deserialize 方法用于将 JSON 字符串转换为对象。

标签: c# json parameters remap


【解决方案1】:

您可以将进入一个类的对象反序列化,然后将其映射到另一个类。

例如,您的第一个类将包含 Id 和 AOID。这也是你反序列化的类。第二个类是 ID 和 BOID,这就是您将其映射到的类。

【讨论】:

    【解决方案2】:

    鉴于您的 product22 值已经序列化,您可以像这样对字符串进行简单替换:

        private void button2_Click(object sender, EventArgs e)
        {
            string product22 = "{  'ID': '56',  'AOID': '747'}";
    
            string json = product22.Replace("'AOID'", "'BOID'");
    
            Console.WriteLine(json);
        }
    

    希望对你有帮助。

    【讨论】:

    • 我确实考虑过这样做,但在我更大的数据集中不确定是否需要更长的时间才能运行,我会试一试
    【解决方案3】:

    您需要将一个对象传递给您的 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      相关资源
      最近更新 更多