在C#中使用Json.net / WebAPI反序列化只读属性

3

可能是重复问题:
使用Json.net - 部分自定义C#对象序列化

我有一个类,在使用asp.net MVC 4 WebAPI时,我成功地将其序列化为json.net。该类具有一个属性,它是一个字符串列表。

public class FruitBasket {
    [DataMember]
    public List<string> FruitList { get; set; }

    public int FruitCount {
        get {
            return FruitList.Count();
        }
    }
}

在我的Get方法中,序列化正常进行,我在JSON中的FruitList属性中得到一个空数组,即[]。如果我在PUT请求的主体中使用相同的JSON,由于FruitList为空,在反序列化期间会在FruitCount属性中出现错误。
我希望FruitList属性(基本上是我的只读属性)进行序列化但不进行反序列化。有没有可能通过设置或其他方式来实现Json.net?

只是一个快速的问题..您是否知道序列化是将代码/对象层次结构压平的过程?从这个角度来看,您实际上无法序列化属性,因为它只是一个方法。您是否序列化了属性背后的字段,或者我没有正确理解问题? - LightStriker
1个回答

0

我知道这并没有回答你的问题,但是解决了生成的错误,因此可能不必担心自定义序列化。

使用一个私有变量来存储FruitList,在get和set中返回它,如果值为null,则将私有变量设置为一个新列表。

public class FruitBasket
{
    private List<string> _fruitList;

    [DataMember]
    public List<string> FruitList
    {
        get
        {
            return _fruitList;
        }
        set
        {
            if (value == null)
            {
                _fruitList = new List<string>();
            }
            else
            {
                _fruitList = value;
            }
        }
    }

    public int FruitCount
    {
        get
        {
            return FruitList.Count();
        }
    }
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接