2016-11-29 91 views
-2

当我学习Newtonsoft JSON我用下面的序列化对象:Newtonsoft JSON转储所有属性

public сlass Foo 
{ 
    public Bar Bar { get; set; } 
} 

public class Bar 
{ 
    public string Title { get; set; } 
} 

var foo = new Foo(); 
JsonConvert.SerializeObject(foo, Formatting.Indented); 

结果是{ "Bar": null }但我想打印{ "Bar": { "Title": null } }不会产生酒吧的一个实例。

我使用了ServiceStack(转储方法)的解决方案并返回一个空对象。也许在DefaultContractResolver中重载一个方法?

+1

在Foo的构造函数中初始化酒吧 – HebeleHododo

+0

这很明显,但如何成为没有它? – Edwok

+2

你为什么要这样?请参阅[XY问题](http://meta.stackexchange.com/q/66377) – HebeleHododo

回答

1

如何在不创建 实例Bar的情况下获得{“Bar”:{“Title”:null}}的JSON。

你不能,除非你开始手工制作你的Json。如果您没有创建Bar实例,Bar将始终返回null。

您可以创建一个Bar的实例并将标题设置为null,这种方式应该可行,但这不是问题。

+0

是的,你是对的,但问题不在于它。 可以从DefaultContractResolver或JsonConvert做到这一点? – Edwok

+0

您可以:创建一个自定义类,从DefaultContractResolver继承并覆盖您的Json(手工制作imho)。例子可以在这里找到(http://www.newtonsoft.com/json/help/html/contractresolver.htm)。最简单的解决方案仍然像@HebeleHododo提到的:在Foo的构造函数中初始化Bar。 – SilentStorm