4

重複の可能性:
不明なタイプのオブジェクトをXMLで逆シリアル化するにはどうすればよいですか?

シリアル化と逆シリアル化を始めたばかりです。

Personタイプのモデルがあり、2つのプロパティ(NameとAge)しかないので、XMLにシリアル化できます。デシリアライズに関しては、私が知る限り、型がPersonであることをコンパイラーに伝えなければなりません。ジェネリックTの世界では、これは逆効果のようです。オブジェクトを「InMemoryOnly」オブジェクトとして確立できると思いました(想像できる場合)。オブジェクトは実行時に作成され、パラメーター/フィールド/プロパティなどもすべてXMLに基づいて作成されます。たぶん匿名タイプのようです。C#コンパイラは設計時にこれを無視する必要があり、インテリセンスが失われることを理解していますが、すべてのオブジェクトが何らかの方法でメモリに渡されるため、実行時に失敗する理由がわかりません。それとも、これはReflectionで可能でしょうか?

とにかく、それが私がやろうとしていることです。XMLから汎用オブジェクトに逆シリアル化します。これはC#で可能ですか?

編集ちょうど重複を見つけたので、今の質問はなぜC#(.NET)がこれを行うことができないのかということです。答えはおそらく「そうではないから」だと私は知っていますが、私の質問は、プログラマーにとって価値があるよりも可能であるか、それとももっと厄介である可能性があるかということです。

この理由は、私が知る限り、これを達成するには、シリアル化と逆シリアル化がタイプ(この場合はPerson)を認識している必要があることを意味します。したがって、シリアル化と逆シリアル化がWCFで発生する場合(シリアル化とシリアル化が異なるアセンブリで発生する場合)、Personオブジェクトを複製する必要があります(これはDRYの原則に反します)

4

1 に答える 1

3

WCF サンプルは、これを行う正当な理由を示していません。
あなたは単にできる - そしてできる!- サーバーとクライアントの両方で使用されるアセンブリに Person クラスを配置します。それが、WCFを使用するときの方法です。
これを行いたくない場合、Visual Studio は、サービス参照を追加するときに、サービスで使用される型を自動的に生成することを提案します。
どちらの場合も、Personクラスを 1 か所だけ更新する必要があります。

于 2012-10-12T07:54:48.243 に答える