有条件地忽略属性序列化



我有一个Asp.Net WebApi项目,我想返回Json格式的产品列表和一个特定的产品。

这是我的产品型号:

public class Product
{
   public int Id { get; set; }
   public string ShortString { get; set; }
   public string LongString { get; set; } 
}

这是我的ApiController:

public class ProductController : ApiController
{
     public IQueryable<Product> Get()
     {
        return Context.Products;
     }
     public IHttpActionResult Get(int id)
     {
        var p = Context.Products.FirstOrDefault(m => m.Id == id);
        if (p == null)
            return NotFound();
        return Ok(p);
     }
 }

我想在一个特定产品中返回LongString字段,但不在产品列表中。Json.Net库中是否存在条件[JsonIgnore]属性。

必须定义一个名为ShouldSerialize{PropertyName}的公共方法,该方法在类中返回bool。

public class Product
{
    public int Id { get; set; }
    public string ShortString { get; set; }
    public string LongString { get; set; }
    public bool ShouldSerializeLongString()
    {
        return (Id < 2); //maybe a more meaningful logic
    }
}

测试它

var l = new List<Product>()
{
    new Product() {Id = 1, ShortString = "s", LongString = "l"},
    new Product() {Id = 2, ShortString = "s", LongString = "l"}
};
Console.WriteLine(JsonConvert.SerializeObject(l));

结果是

[{"Id":1,"ShortString":"s","LongString":

相关内容

  • 没有找到相关文章

最新更新