有没有办法有条件地从JSON序列化中排除项目?我在一个带有WebAPI的.NET4应用程序中使用C#。我的类中已经有了[DataMember]和[ScriptIgnore],一切都运行得很好。我想做的不是在运行时根据属性值包含某些属性
例如,我可能只想在以下情况下序列化List<Foo> myFoo
myFoo != null && myFoo.Count > 0
JSON在客户机上被转换回我自己的JS对象,所有属性都已经像myFoo: []一样实例化了。没有必要将这些以JSON格式发送到客户端,因为它基本上不会对对象产生任何影响,而只是在客户端发送更多数据和使用更多处理。这是一个非常依赖JS的HTML5移动站点,我正在尽可能地减少数据和处理。
发布于 2012-04-24 23:45:34
我找到了Json.net,它允许我在运行时进行条件序列化。
发布于 2012-10-19 00: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 22: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
复制相似问题