3

.NET4.5WindowsストアアプリでストックJSONシリアライザーを使用しています-

System.Runtime.Serialization.Json.DataContractJsonSerializer

APIプロバイダーによって提供されるクラスがあります

class A { public DateTime Date {get;set} }

これを行うことで日付フィールドを非表示にしたかった(注-新しいキーワード):

class AEx : A { public new string Date {get;set} }  

しかし、私は例外を得ています:

タイプ'AEx'は、データメンバー'Date'がそのタイプ階層で複製されているため、DataContractJsonSerializerでシリアル化できません。

私はそれが何をするのか理解しています..しかし私の質問はそれがどのように行われるのかではなく、なぜですか?

論理的に言えば、ポリモーフィズムなどのプログラミング機能と互換性がある必要があります。なぜこのクラスはそれを無視させられたのですか?

4

1 に答える 1

13

クラスには基本的に同じ名前の2つのプロパティが含まれています。そのため、そのプロパティ名を含むJSONを逆シリアル化しようとすると、設定するプロパティを知る方法がありません。

同様に、そのタイプのオブジェクトをシリアル化する場合、同じプロパティ名を使用してシリアル化する必要がある2つの値があります。JSONはどのように見えると思いますか?

基本的に、同じ名前の2つのプロパティを持つタイプは、プレーンな名前/値ペア形式のシリアル化と互換性がありません。(どのプロパティがどの宣言クラスに関連付けられているかを指定できる、より高度なシリアル化メカニズムですが、JSONはそれを行いません。)

于 2012-12-04T14:32:01.453 に答える