无法通过Json.Net将继承的属性序列化为JSON

时间:2012-12-11 09:45:25

标签: c#-4.0 inheritance serialization json.net

我正在使用C#.NET 4.0和Newtonsoft JSON 4.5.0.11

    [JsonObject(MemberSerialization.OptIn)]
    public interface IProduct
    {
        [JsonProperty(PropertyName = "ProductId")]
        int Id { get; set; }
        [JsonProperty]
        string Name { get; set; }
    }

    public abstract class BaseEntity<T>
    {
        private object _id;

        public T Id
        {
            get { return (T)_id; }
            set { _id = value; }
        }
    }

    public class Product : BaseEntity<int>, IProduct
    {
        public string Name { get; set; }
        public int Quantity { get; set; }
    }

我需要序列化对象的一部分,并使用具有声明的具体属性的接口来执行此操作。

序列化如下:

Product product = new Product { Id = 1, Name = "My Product", Quantity = 5};
JsonConvert.SerializeObject(product);

预期结果是:

{"ProductId": 1, "Name": "My Product"}

但实际结果是:

{"Name": "My Product"}

如何正确序列化此对象?


UPD:查看了json.net的源代码,得出的结论是这是一个通过ReflectionUtils获取有关对象信息的错误。

1 个答案:

答案 0 :(得分:1)

你试过这个吗?

public interface IProduct
{
    int Id { get; set; }
    string Name { get; set; }
}

[JsonObject(MemberSerialization.OptIn)]
public abstract class BaseEntity<T>
{
    private object _id;
    [JsonProperty]
    public T Id
    {
        get { return (T)_id; }
        set { _id = value; }
    }
}

[JsonObject(MemberSerialization.OptIn)]
public class Product : BaseEntity<int>, IProduct
{
    [JsonProperty]
    public string Name { get; set; }
    [JsonProperty]
    public int Quantity { get; set; }
}