更新:已解决!看起来Json.NET默认包含派生类型属性,但由于我的代码中出现类型被基类型覆盖的错误,因此不包括它们。
我目前正在为学校做一个项目,我偶然发现了一个问题。
我需要将对象序列化为Json,我使用Newtonsoft Json.NET。我试图序列化的对象有一个特定基类的对象列表,但该列表中的对象是具有自己唯一属性的派生类型。
目前,只有基类的属性包含在生成的Json中。如果可能,我希望Json转换器检测集合中对象的派生类,并序列化它们的唯一属性。
下面是一些代码,作为我正在做的事情的一个例子。
我使用的类:
public class WrappingClass
{
public string Name { get; set; }
public List<BaseClass> MyCollection { get; set; }
}
public class BaseClass
{
public string MyProperty { get; set; }
}
public class DerivedClassA : BaseClass
{
public string AnotherPropertyA { get; set; }
}
public class DerivedClassB : BaseClass
{
public string AnotherPropertyB { get; set; }
}
序列化一些虚拟对象:
WrappingClass wrapperObject = new WrappingClass
{
Name = "Test name",
MyCollection = new List<BaseClass>();
};
DerivedClassA derivedObjectA = new DerivedClassA
{
MyProperty = "Test my MyProperty A"
AnotherPropertyA = "Test AnotherPropertyA"
};
DerivedClassB derivedObjectB = new DerivedClassB
{
MyProperty = "Test my MyProperty B"
AnotherPropertyB = "Test AnotherPropertyB"
};
wrapperObject.MyCollection.Add(derivedObjectA);
wrapperObject.MyCollection.Add(derivedObjectB);
var myJson = JsonConvert.SerializeObject(wrapperObject);
目前将生成的Json:
{"Name":"Test name","MyCollection":[{"MyProperty":"Test my MyProperty A"}{"MyProperty":"Test my MyProperty B"}]}
我想要的Json:
{"Name":"Test name","MyCollection":[{"MyProperty":"Test my MyProperty A","AnotherPropertyA":"Test AnotherPropertyA"},{"MyProperty":"Test my MyProperty B","AnotherPropertyB":"Test AnotherPropertyB"}]}
有什么想法吗?谢谢!
答案 0 :(得分:2)
json.NET的默认行为是包含派生类型的所有属性。你没有得到它们的唯一原因是你在基类型上定义了一个[DataContract]
,你没有扩展到派生类型,或者你有像optin序列化等。
答案 1 :(得分:-1)
如果您不想将它们序列化为
,则使用“忽略”属性装饰属性
public class DerivedClassA : BaseClass
{
[JsonIgnore]
public string AnotherPropertyA { get; set; }
}
&#13;