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

Ash*_*ain 3 c# xml json json.net

场景:

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

对于上面的场景,我创建了一个Class并提供了如下所有三个属性

pubilc class MyClass
{
    public string as { get; set;}
    public int value { get; set;}
    public string asd { get;s et;}
}
Run Code Online (Sandbox Code Playgroud)

对于第一个HttpWebRequest,对于第一个服务器,我想只发送两个来自MyClass的属性'as'和'asd'现在我将序列化NewtonSoft的JsonConvert函数如下

MyClass class = new MyClass();
string json = JsonConvert.SerializeObject(class);
Run Code Online (Sandbox Code Playgroud)

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

从Json中删除Null属性的语法

string json = JsonConvert.SerializeObject(class, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
Run Code Online (Sandbox Code Playgroud)

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

现在问一下如果jsen属性为0,如何从json中删除属性.

小智 8

只需修改一下你的表情即可

string json = JsonConvert.SerializeObject(
  class, 
  Newtonsoft.Json.Formatting.Indented, 
  new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }
);
Run Code Online (Sandbox Code Playgroud)

如下,

string json = JsonConvert.SerializeObject(
  class, 
  Newtonsoft.Json.Formatting.Indented, 
  new JsonSerializerSettings { 
    NullValueHandling = NullValueHandling.Ignore,
    DefaultValueHandling = DefaultValueHandling.Ignore 
  }
);
Run Code Online (Sandbox Code Playgroud)


小智 6

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

public int? value { get; set;}
Run Code Online (Sandbox Code Playgroud)