我正在使用DataContractJsonSerializer,并且DataMember名称存在问题。

我做了一个基类和几个派生类。我需要派生类,因为我有不同的json字符串。我想反序列化json字符串,因此需要为数据成员使用不同的名称。我尝试更改DataMember名称,如以下示例所示:

基类:

[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并在派生类上添加了示例。对我来说似乎可以在派生类上做到这一点(尤其是对于继承问题)。什么是正确的?

最佳答案

我有同样的问题。我正在使用VB.NET,并且必须对属性进行阴影(或重载)以使WCF尊重派生类中的DataMember属性。在C#中,您应该可以使用new运算符。

public class DerivedClass
{
    [DataMember(Name = "first_method")]
    new public string FirstMethod { get; protected set; }
}

09-30 11:29