我正在使用DataContractJsonSerializer,并且在DataMember名称上遇到了问题。
我创建了一个基类和多个派生类。我需要派生类,因为我有不同的JSON字符串。我想对JSON字符串进行反序列化,因此需要不同的数据成员名称。我尝试像以下示例中更改DataMember名称:
Baseclass:
[DataContract]
public abstract class BaseClass
{
[DataMember]
public virtual string FirstMethod { get; protected set; }
}
派生类:
[DataContract]
[KnownType(typeof(BaseAccess))]
public class DerivedClass
{
[DataMember(Name="first_method")]
public virtual string FirstMethod { get; protected set; }
}
问题是当我使用派生类时,序列化似乎忽略了给定的DataMember名称。因此,当我使用DerivedClass类型进行反序列化时,序列化似乎会使用基类中的"FirstMethod"名称进行序列化,而不是派生类中的"first_method"名称(在我的情况下,对于几个派生类是不同的)。是否可能使用派生类的DataMember名称(对于我的情况下有多个派生类是不同的)?
另一个问题。我找到了在基类上添加KnownType并在派生类上添加KnownType的示例。在我的理解中,将其添加到派生类上(尤其是考虑到继承)似乎更合适。哪个是正确的?