用于JSON序列化的条件ScriptIgnore

时间:2012-04-18 15:07:12

标签: c# json jsonserializer

有没有办法从JSON序列化中有条件地排除项目?我在使用WebAPI的.NET4应用程序中使用C#。我的课程已经[DataMember][ScriptIgnore],一切正常。我想要做的是在运行时根据属性的值

不包含某些属性

例如,我可能只想在

时序列化List<Foo> myFoo

myFoo != null && myFoo.Count > 0

JSON被转换回客户端上我自己的JS对象,它将实例化所有属性,如myFoo: []。只需将JSON中的这些内容发送到客户端,因为它基本上不会对对象产生任何影响,只会发送更多数据并在客户端上使用更多处理。这是一个非常重要的JS5 HTML5移动网站,我正在尝试减少尽可能多的数据和处理。

3 个答案:

答案 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允许我在运行时进行条件序列化。