为什么Json.NET要求我使用[DataContract]和[DataMember]?

时间:2017-04-18 21:24:12

标签: .net json serialization json.net

我有数百个现有的POCO,我目前正在使用Entity Framework。一个新的要求是我需要能够序列化这些对象并将它们缓存在Redis中。我决定使用Json.NET序列化为JSON,但它不会序列化我的所有对象。请参阅下面的示例。

public class Envelope<T>
{
    public string Metadata{ get; set; }
    public T Value { get; set; }
}

public class MyClass {
    public string MyProperty { get; set; }
}

public void Serialize()
{
    Envelope<List<MyClass>> envelope = new Envelope<List<MyClass>>();
    envelope.Metadata = "Some Metadata";
    envelope.Value.Add(new MyClass { MyProperty = "Some Property Data" });
    string json = JsonConvert.Serialize(envelope);
}

当序列化此数据结构时,除MyClass.MyProperty被忽略外,一切看起来都很好。 List<MyClass>成为具有1个元素的JSON数组,但该元素没有属性。如果我将[DataContract][DataMember]添加到MyClass,那么它们会被正确序列化。我不应该这样做,对吧?我没有必要将这些属性放在Envelope<T>类上。我宁愿不必经历我的一百个POCO并添加这些属性。

0 个答案:

没有答案