XML逆シリアル化-属性値を自動的にクラスに変換します(.net)
-
05-07-2019 - |
質問
(vb.net/c#/etc)
ちょっとしたデシリアライゼーションのマジックをどうやってやるかわからない。現在、列挙型を含め、標準の逆シリアル化は正常に機能しますが、属性をクラスに変換したい今。ああ!私は何を考えていましたか!
私のxmlは少しこのように見えます:
....
<review user="..." version="2.2">...</review>
そしてこれは私のプロパティ/クラスの場合:
[XmlAttribute("version")]
public MyVersion Version { get; set; }
class MyVersion {
// equality overloaded
// can ctype() from string to MyVersion
// constructor that takes a single string, etc
}
文字列プロパティをこのクラスに自動的に逆シリアル化できるように、シリアライザーを支援するにはどうすればよいですか? MyVersionクラスを何らかの方法で変更する必要がありますか、それともプロパティの定義を変更する必要がありますか?
- OnDeserializedなどのメソッドをオーバーライドする必要はありません。このプロジェクトでは価値がありません。
これをデフォルトのxmlデシリアライザで実行できない場合は、十分に知ることができます。良くないことがたくさんあるので、私は驚かないでしょう。
ありがとう!
解決
これは宣言的な方法ではサポートされていません。親クラス(要素にシリアル化されるクラス)でIXmlSerializableを実装し、文字列とMyValue型の間の変換を手動で実行する必要があります。
他のヒント
これは非常に簡単に行うことができます-逆シリアル化アクションとしてではありません。
XSDを使用して、逆シリアル化用のクラスを作成します。これらはすべて部分クラスであるため、レビュークラスの新しい部分(属性 'version'を含む)を記述し、バージョンを取得/設定するメソッドを追加できます。
getメソッドsimpleでそのクラスの新しいインスタンスを作成し、setメソッドsimpleで提供されたバージョンクラスから既存のバージョンを更新します。
所属していません StackOverflow