有没有办法有条件地从JSON序列化中排除项目?我在一个带有WebAPI的.NET4应用程序中使用C#。我的类中已经有了[DataMember]
和[ScriptIgnore]
,一切都运行得很好。我想做的不是在运行时根据属性值包含某些属性
例如,我可能只想在以下情况下序列化List<Foo> myFoo
myFoo != null && myFoo.Count > 0
JSON在客户机上被转换回我自己的JS对象,所有属性都已经像myFoo: []
一样实例化了。没有必要将这些以JSON格式发送到客户端,因为它基本上不会对对象产生任何影响,而只是在客户端发送更多数据和使用更多处理。这是一个非常依赖JS的HTML5移动站点,我正在尽可能地减少数据和处理。
发布于 2012-04-24 15:45:34
我找到了Json.net,它允许我在运行时进行条件序列化。
发布于 2012-10-18 16:32:36
感谢OP回答你的问题,但如果我遇到同样的情况,更多的信息将是很好的。这让人精疲力竭,但我最终找到了方法。没有太多关于它的东西,但according to a lowly page on Json.net's archive下面是它的工作原理:
public class Tricorn
{
public string RocketFuel { get; set; }
public bool ShouldSerializeRocketFuel()
{
return !string.IsNullOrEmpty(this.RocketFuel.Length);
}
}
关键是创建一个在属性名中带有谓词"ShouldSerialze“的方法。返回值指示是否应该序列化它,其余的由Json.net处理。希望这对任何人都有帮助!
发布于 2012-04-20 14:06:57
在这里,使用getter可能是最好的选择:
[ScriptIgnore]
private List<Foo> myFoo;
public List<Foo> MyFoo
{
get
{
if (this.myFoo != null && this.myFoo.Count > 0)
{
return this.myFoo;
}
else
{
return null;
}
}
}
https://stackoverflow.com/questions/10212302
复制