【问题标题】:C# Using Newtonsoft Json to change Property Name of Item in List based upon an AttributeC#使用Newtonsoft Json根据属性更改列表中项目的属性名称
【发布时间】:2020-10-22 23:28:48
【问题描述】:

我正在尝试通过引用列表中的属性来更改列表中属性的名称。

下面是包含 B 列表的外部类 A 的代码。如果您注意到,在“A”上有 [DataMember, ItemName("C")]。总之,我想用这个“ItemName”属性将B中的“Data”属性重命名为“C”

代码:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace ConsoleApp1
{
  public class B
  {
    [DataMember]
    public int Data { get; set; }
  }

  public class A
  {
    [DataMember, ItemName("C")]
    public List<B> List { get; set; }
  }

  public class ItemNameAttribute : Attribute
  {
    public string Name { get; }

    public ItemNameAttribute(string name)
    {
      Name = name;
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      var a = new A();
      a.List = new List<B>()
      {
        new B() { Data = 1 }, new B() { Data = 2 }
      };

      var json = JsonConvert.SerializeObject(a);
    }
  }
}

我想要的预期 Json 输出是

{
  "List": [
    {
      "C": 1
    },
    {
      "C": 2
    }
  ]
}

我目前的输出是:

{
  "List": [
    {
      "Data": 1
    },
    {
      "Data": 2
    }
  ]
}

【问题讨论】:

    标签: c# serialization json.net


    【解决方案1】:

    您可以使用 JsonPropertyAttribute 来更改属性的名称。

    这是源代码。

    public class B
      {
        [JsonProperty("C")]
        public int Data { get; set; }
      }
    
      public class A
      { 
        [JsonProperty("List")]   
        public List<B> List { get; set; }
      }
    

    【讨论】:

    • 这不是问题要问的。我需要在列表中有属性
    • 1.我没有能力添加 JsonProperty 属性。我无法更改任何属性。 2.我已经设法使用现有代码+字典解决了这个问题。这很复杂..但我想通了
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2016-10-21
    • 2023-03-08
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多