情境:
我必须发送一个Httpwebrequest和服务器要求它只接受两个值作为Json格式,我想再向另一个服务器发送一个请求,并且一次需要一个JSON格式的值。
对于上面的场景,我创建了一个Class并提供了所有三个属性,如下面的
pubilc class MyClass
{
public string as { get; set;}
public int value { get; set;}
public string asd { get;s et;}
}
对于第一个HttpWebRequest,对于第一个服务器,我只想从MyClass发送两个属性'作为'和' asd'现在我将序列化NewtonSoft的JsonConvert函数,如下所示
MyClass class = new MyClass();
string json = JsonConvert.SerializeObject(class);
上面的语法将返回具有0和null值属性的json,NewtonSoft提供了从Json中删除null值的函数,但是它不能删除值为0的属性,或者你可以说你的属性数据类型是int,并且没有分配任何值,而是为这些属性赋值。
从Json中删除Null属性的语法
string json = JsonConvert.SerializeObject(class, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
上述语法将在序列化MyClass对象期间删除空值。
现在询问如果属性为0,则如何从json中删除属性。
答案 0 :(得分:5)
您可以尝试将int属性定义为可为空:
public int? value { get; set;}
答案 1 :(得分:1)
我接受的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);
答案 2 :(得分:1)
只需修改您的表情
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
}
);