如何通过从 c# 对象中删除空值属性和零 (0) 值属性来优化 json

Posted

技术标签:

【中文标题】如何通过从 c# 对象中删除空值属性和零 (0) 值属性来优化 json【英文标题】:How to refine json by remove null values properties and zero (0) value properties from the c# object 【发布时间】:2015-02-09 13:13:19 【问题描述】:

场景:

我必须发送一个 Httpwebrequest 并且服务器要求它只接受两个 Json 格式的值,我想向另一台服务器发送一个请求,并且一次需要一个 Json 格式的值。

对于上述场景,我创建了一个类并提供所有三个属性,如下所示

pubilc class MyClass

    public string as  get; set;
    public int value  get; set;
    public string asd  get;s et;

对于第一个 HttpWebRequest,到第一台服务器,我只想从 MyClass 'as' 和 'asd' 发送两个属性,现在我将通过 NewtonSoft 的 JsonConvert 函数进行序列化,如下所示

MyClass class = new MyClass();
string json = JsonConvert.SerializeObject(class);

上面的语法将返回具有 0 和空值属性的 json,NewtonSoft 提供了从 Json 中删除空值的功能,但它不能删除值为 0 的属性,或者您可以说您的属性数据类型是否为 int并且没有分配任何值,而是将 0 分配给这些属性。

从 Json 中删除 Null 属性的语法

string json = JsonConvert.SerializeObject(class, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings  NullValueHandling = NullValueHandling.Ignore );

上述语法将在序列化 MyClass 对象期间删除空值。

现在询问如何从 json 中删除属性,如果它的属性为 0。

【问题讨论】:

作为@mgigirey 的回答,将 int 转换为可为空的。我只是想解释为什么它不应该首先删除零。不像null,就像说"It's an error or should be ignored",零通常是一个可接受的值,而不是不寻常的标志。这就是为什么将int 转换为int? 是处理您的情况的正确方法 【参考方案1】:

您可以尝试将您的 int 属性定义为可为空的:

public int? value  get; set;

【讨论】:

【参考方案2】:

修改你的表情

string json = JsonConvert.SerializeObject(
  class, 
  Newtonsoft.Json.Formatting.Indented, 
  new JsonSerializerSettings  NullValueHandling = NullValueHandling.Ignore 
);

如下,

string json = JsonConvert.SerializeObject(
  class, 
  Newtonsoft.Json.Formatting.Indented, 
  new JsonSerializerSettings  
    NullValueHandling = NullValueHandling.Ignore,
    DefaultValueHandling = DefaultValueHandling.Ignore 
  
);

【讨论】:

【参考方案3】:

我接受了 mgigirey 给出的答案,我做了另一个解决方案,我将我的 Json 转换为 xml 并删除了值为 0 的节点并再次转换为 Json。我的解决方案也对我有用,但它比 Mgigirey 的回答有点冗长和慢。

所以这里有两个答案,如果你们有人想采用我的解决方案,那么请参阅以下内容。

//This line will remove the null as i earlier mentioned in my question.
string jsonStatus = JsonConvert.SerializeObject(myJson, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings  NullValueHandling = NullValueHandling.Ignore );

//Create xml object by covnert json into xml
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);

//Get the property name which have the value 0
var v = doc.GetElementsByTagName("value")[0];

//Remove the child node.
doc.DocumentElement.RemoveChild(v);

//Again convert into the json.
string jsonText = JsonConvert.SerializeObject(doc);

【讨论】:

很高兴能帮上忙。 :) 谢谢,如果可行,您也可以投票赞成我的答案。

以上是关于如何通过从 c# 对象中删除空值属性和零 (0) 值属性来优化 json的主要内容,如果未能解决你的问题,请参考以下文章

通过从C#中的类调用函数来显示消息

通过从 csv 获取数据在 C# 中创建 json 数组

C# 0-1 背包问题,已知集合中的总和和零个数

PySpark 通过从十进制列中删除比例来写入 csv

powershell 通过从文件名中删除“&”来重命名目录中的文件。

通过从多个列中删除匹配的电子邮件域来过滤 Pandas 数据框