【问题标题】:Serialize list count instead of list序列化列表计数而不是列表
【发布时间】:2020-11-27 07:49:37
【问题描述】:

我正在将 Web 服务接收到的 XML 请求记录在 JSON 文件中。 我们有一个类,其所有属性如下:

class RequestExternal
{
  [XmlAttribute("FirstName")]
  [JsonProperty]
  public string Firstname{get; set;}

  [XmlAttribute("FirstName")]
  [JsonProperty]
  public string LastName{get; set;}

  [XmlAttribute("FirstName")]
  [JsonProperty] -- To be changed : Want to log this as PaymentCards.Count
  public List<Object> PaymentCards{get; set;}
}

我想将此请求记录为:

{
  FirstName: 'XXX',
  LastName: 'XXX',
  PaymentCount: **count of PaymentCard list**
}

有没有办法通过 JsonConverter 或其他方式来实现?

我可以通过引入一个新的派生属性来做到这一点。

但这对我不起作用。我们有一个文档机制,可以将这些新属性公开给客户。

【问题讨论】:

    标签: c# json .net json.net


    【解决方案1】:

    取决于您的用例的具体情况以及您是否有权访问类定义。您可以轻松编写 converter注释 属性

    给定

    public class ListToCountConverter : JsonConverter<IList>
    {
       public override void WriteJson(JsonWriter writer, IList value, JsonSerializer serializer)
          => writer.WriteValue(value.Count);
    
       public override IList ReadJson(JsonReader reader, Type objectType, IList existingValue, bool hasExistingValue, JsonSerializer serializer)
           => throw new NotImplementedException();
    }
    

    你的班级

    class RequestExternal
    {
       ...
       [JsonProperty] 
       [JsonConverter(typeof(ListToCountConverter))]
       public List<Object> PaymentCards { get; set; }
    }
    

    示例

    var test = new RequestExternal()
    {
       Firstname = "Bob",
       LastName = "Derp",
       PaymentCards = new List<object>(){null,null,null}
    };
    
    var result = JsonConvert.SerializeObject(test, Formatting.Indented);
    Console.WriteLine(result);
    

    输出

    {
      "Firstname": "Bob",
      "LastName": "Derp",
      "PaymentCards": 3
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 2013-06-13
      • 2021-11-29
      • 2016-04-12
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多