【问题标题】:How to do Conditional Serialization using C# - NewtonSoft.Json如何使用 C# 进行条件序列化 - NewtonSoft.Json
【发布时间】:2017-08-04 12:53:25
【问题描述】:

我正在使用 NewtonSoft.Json 进行 json 序列化

public class CommonBase
{
    [JsonProperty(PropertyName = "u_customer_id")]
    public long CustomerId { get; set; }
}

我想做一个条件序列化,如果CustomerId 的值为0,我想在json 序列化过程中为CustomerId 设置一个空白值。由于CommonBase 是一个基类,我无法将数据类型从long 更改为string

我怎样才能做到这一点?

【问题讨论】:

  • 您可以编写自己的自定义自定义序列化程序。此处示例:blog.maskalik.com/asp-net/…。你需要实现WriteJsonReadJson方法
  • @xszaboj..我不喜欢那个..我只是检查Json.Net是否为此提供任何内置功能或任何解决方法
  • 您的预期结果是什么? "u_customer_id":null"u_customer_id":"" 或在序列化时跳过该属性?
  • 预期结果是 "u_customer_id":""
  • 所以 json 属性有时是字符串(如果为空),有时是数字(如果不为空)。对于合同来说,这是一个非常糟糕的设计。谁对此负责?如果 u_customer_id 在所有情况下都是字符串,请检查合同描述

标签: c# .net serialization json.net jsonserializer


【解决方案1】:

您几乎可以在问题标题中找到答案。你要找的是Conditional Property Serialization

您只需要添加这样命名的方法:ShouldSerialize + PropertyName。在您的情况下,方法应如下所示:

public bool ShouldSerializeCustomerId()
{
   return SomeCondition;
}

附:如果你正在创建基类,你可能想要有抽象类。

【讨论】:

    【解决方案2】:

    我已通过将 CustomerId 属性更改为可为空来解决此问题。

       public long? CustomerId { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 2018-06-05
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      相关资源
      最近更新 更多