1

C#.NET4.0とNewtonsoftJSON4.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を介してオブジェクトに関する情報を取得する際のバグであるという結論に達しました。

4

1 に答える 1

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; }
}
于 2012-12-11T09:53:43.117 に答える