3

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

例如,我可能只想序列化List<Foo> myFoo

myFoo != null && myFoo.Count > 0

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

4

3 回答 3

7

感谢 OP 回答你的问题,但是当我遇到同样的情况时,更多的信息会很棒。这很累,但我终于找到了方法。关于它的内容并不多,但根据 Json.net 档案中的一个低级页面,它是这样工作的:

public class Tricorn
{
   public string RocketFuel { get; set; }

   public bool ShouldSerializeRocketFuel()
   {
      return !string.IsNullOrEmpty(this.RocketFuel.Length);
   }
}

关键是为您的属性名称创建一个带有谓词“ShouldSerialze”的方法。返回值指示它是否应该被序列化并由 Json.net 处理其余部分。希望这对任何人都有帮助!

于 2012-10-18T16:32:36.390 回答
0

我找到了 Json.net,它允许我在运行时进行条件序列化。

于 2012-04-24T15:45:34.037 回答
0

在这里使用吸气剂可能是你最好的选择:

[ScriptIgnore]
private List<Foo> myFoo;

public List<Foo> MyFoo
{
   get
   {
      if (this.myFoo != null && this.myFoo.Count > 0)
      {
         return this.myFoo;
      }
      else
      {
         return null;
      }
   }
}
于 2012-04-20T14:06:57.497 回答