有没有办法从JSON序列化中有条件地排除项目?我在使用WebAPI的.NET4应用程序中使用C#。我的课程已经[DataMember]
和[ScriptIgnore]
,一切正常。我想要做的是在运行时根据属性的值
例如,我可能只想在
时序列化List<Foo> myFoo
myFoo != null && myFoo.Count > 0
JSON被转换回客户端上我自己的JS对象,它将实例化所有属性,如myFoo: []
。只需将JSON中的这些内容发送到客户端,因为它基本上不会对对象产生任何影响,只会发送更多数据并在客户端上使用更多处理。这是一个非常重要的JS5 HTML5移动网站,我正在尝试减少尽可能多的数据和处理。
答案 0 :(得分:7)
感谢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处理其余的。希望这对任何人都有帮助!
答案 1 :(得分:0)
使用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;
}
}
}
答案 2 :(得分:0)
我发现Json.net允许我在运行时进行条件序列化。