私は非常に単純なタスクを達成する必要があります:オブジェクト階層を直列化および逆シリアル化します。JavaのXStreamと同じ機能を持つC#シリアライザ/デシリアライザ
私は試しましたXMLSerializer
、DataContractSerializer
、、NetDataContractSerializer
何も問題なく動作しているようですが、常に問題があります。
XMLSerializer
は、すべてのプロパティを公開する必要があるため、悪いです。 (Net)DataContractSerializerは、一部のメタデータが常に欠落しているため悪いですが、ユーザーがXMLを作成するときにはメタデータがありません。
このタスクをどのように解決しますか?クラスを考えてみましょう:
class A {
private B instanceB;
private int integerValue;
... getters/setters
}
class B {
private List<C> cInstanceList;
private string stringValue;
... getters/setters
}
class C {
... some other properties
... getters/setters
}
とユーザー入力:
<A>
<B>
<cInstanceList>
<C>
<someproperties>val</someproperties>
</C>
<C>
<someproperties>differentVal</someproperties>
</C>
</cInstanceList>
<strigValue>lalala<stirngValue>
</B>
<integerValue>42</integerValue>
</A>
何DataContractors
不足していることを必要としない "タイプ" または "名前空間" などXStream
のようなメタデータがあります。私は、オブジェクトをデシリアライズの種類を知っているので、私は関数を記述する必要があります。
public T Deserialize<T>(string xml);
私の希望ユースケース:
var myDeserializedObject = Deserialize<A>(inputString);
私が間違って何をしているのですか?別の方法で解決しますか?
Oと私は忘れてしまいました.GETTERとSETTERSをC#で使用しないでください! –