当前位置:  开发笔记 > 编程语言 > 正文

有条件地忽略属性序列化

如何解决《有条件地忽略属性序列化》经验,为你挑选了1个好方法。

我有一个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 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一种特定产品中的字段,而不是产品列表中的字段。[JsonIgnore]Json.Net库中是否有任何条件属性。



1> Hamid Pourja..:

您必须定义一个公共方法,该方法的名称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()
{
    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”:“ l”},{“ Id”:2,“ ShortString”:“ s”}]


对于读者而言:这是一个完善的模式,受到PropertyDescriptor(意味着:PropertyGrid等),XmlSerializer和许多其他序列化器(包括Json.NET,protobuf-net等)的尊重。
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有