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 型で逆シリアル化すると、(派生クラスの) "first_method" ではなく、(基本クラスの) "FirstMethod" という名前でシリアル化が行われるようです。派生クラスの DataMember 名を使用することは可能ですか (私の状況ではいくつかの派生クラスで異なります)。
別の質問です。基本クラスに追加され、派生クラスに追加された KnownType の例を見つけました。派生クラスでそれを行うのは私にとって論理のようです(特に継承の問題の場合)。何が正しいですか?