如何使用 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/…。你需要实现WriteJson
和ReadJson
方法
@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的主要内容,如果未能解决你的问题,请参考以下文章