我是json.net的新手,所以任何帮助都会受到赞赏。
我正在使用json.net的net 2.0版本,因为我需要将它集成到Unity3d引擎中建议的答案(使用nullvaluehandling)只是不工作!我应该认为这是最老版本的重演吗?
所以,有一个像这样的对象:
Object ()
{
ChildObject ChildObject1;
ChildObject ChildObject2;
}
ChildObject ()
{
Property1;
Property2;
}
我希望json.net 仅序列化所有对象的null属性,包括子对象。因此,如果我只实现ChildObject1的property1和ChildObject2的property2,那么JsonConvert中的字符串将是这样的:
{
"ChildObject1":
{
"Property1": "10"
},
"ChildObject1":
{
"Property2":"20"
}
}
但默认行为会创建如下字符串:
{
"ChildObject1":
{
"Property1": "10",
"Property2": "null"
},
"ChildObject2":
{
"Property1": "null,
"Property2":"20"
}
}
我知道NullValueHandling,但在我的情况下它没有正确地工作!它只忽略父对象(我们正在序列化的对象)的null属性,但如果这个父对象有一些子对象,它将不会忽略这些子对象的null属性。我的情况不同。
如果子对象的一个属性不为null,则将其序列化为一个非null属性的字符串,其他属性为null。
我的代码的UPD示例:
我有嵌套类
我的目标是这样的:
public class SendedMessage
{
public List<Answer> Answers { get; set; }
public AnswerItem Etalon {get; set;}
}
public class Answer ()
{
public AnswerItem Item { get; set; }
}
public class AnswerItem ()
{
public string ID { get; set; }
public bool Result { get; set; }
public int Number { get; set; }
}
我实现了一个像这样的SendedMessage对象:
new SendedMessage x;
x.Etalon = new AnswerItem();
x.Etalon.Result = true;
比我使用
string ignored = JsonConvert.SerializeObject(x,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
它创建了这个字符串:
{&#34; Etalon&#34;:{&#34; ID&#34; =&#34; null&#34;,&#34;结果&#34; =&#34; false&#34;,Number&#34; =&#34; null&#34;}}
所以它真的忽略了空对象Answers(一个List),但是不要忽略子对象的null属性。
感谢您的帮助!
答案 0 :(得分:3)
使用它:
string ignored = sonConvert.SerializeObject(movie,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
这是一个例子:
public class Movie
{
public string Name { get; set; }
public string Description { get; set; }
public string Classification { get; set; }
public string Studio { get; set; }
public DateTime? ReleaseDate { get; set; }
public List<string> ReleaseCountries { get; set; }
}
static void Main(string[] args)
{
Movie movie = new Movie();
movie.Name = "Bad Boys III";
movie.Description = "It's no Bad Boys";
string included = JsonConvert.SerializeObject(movie,
Formatting.Indented,new JsonSerializerSettings { });
// {
// "Name": "Bad Boys III",
// "Description": "It's no Bad Boys",
// "Classification": null,
// "Studio": null,
// "ReleaseDate": null,
// "ReleaseCountries": null
// }
string ignored = JsonConvert.SerializeObject(movie,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
// {
// "Name": "Bad Boys III",
// "Description": "It's no Bad Boys"
// }
}