如何使用 C# 进行条件序列化 - NewtonSoft.Json

Posted

技术标签:

【中文标题】如何使用 C# 进行条件序列化 - NewtonSoft.Json【英文标题】:How to do Conditional Serialization using 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 在所有情况下都是字符串,请检查合同描述 【参考方案1】:

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

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

public bool ShouldSerializeCustomerId()

   return SomeCondition;

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

【讨论】:

【参考方案2】:

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

   public long? CustomerId  get; set; 

【讨论】:

以上是关于如何使用 C# 进行条件序列化 - NewtonSoft.Json的主要内容,如果未能解决你的问题,请参考以下文章

Newtons Raphson 迭代问题

C#中如何实现多个观测数据对象序列化和反序列化?

C#如何对Excel表格进行条件选择

如何在 C# 中按 ID 对 JSON 数据进行分组

C#中的DATAGRIDVIEW表格可以进行条件筛选的显示数据吗?

如何在 c# 中添加特定条件项后对特定元素进行分组 linq to sql