XMLにシリアライズ(その属性を持つ)オブジェクトを実行する方法はありますか?

StackOverflow https://stackoverflow.com/questions/390800

  •  23-08-2019
  •  | 
  •  

質問

(FormElementそれを呼び出す)クラスを作成します。そのクラスは、彼らがデータ要素(名前、シーケンス番号、値、単なる文字列である、など)を持っているメタデータのようないくつかの性質を持っている必要があります。

このクラスは、型の検証アプリケーションブロックの検証クラスの属性として持ちます。

私は、XMLと、それをデシリアライズするためにそれをシリアル化します。検証アプリケーションブロックの属性を含むクラスのすべてのプロパティは直列化を生き残ることを確認します。

いくつかの提案?

正しい解決策はありません

他のヒント

.NETフレームワークは、これはあなたがこのようにそれを行うだろうC#を使用して、中に組み込まれています:

// This code serializes a class instance to an XML file:
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextWriter writer = new StreamWriter(xmlFileName))
{
     xs.Serialize(writer, InstanceOfObjectToSerialize);
} 

そして、このスニペットは、クラスのインスタンスに戻ってXMLファイルをデシリアライズする方法の例です。

// this code creates a class instance from the file we just made:
objectToSerialize newObject;
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextReader reader = new StreamReader(xmlFileName))
{
    newObject = (ObjectToSerialize) xs.Deserialize(reader);
}

あなたはこれらが機能するために[Serializableを]属性を使用してクラスをマークする必要があります。あなたがもう少しきれいあなたのXML出力を作成したい場合は、[のXmlElement]使用することができますし、[XmlAttribute]あなたのクラスのプロパティの属性は、彼らが選択のあなたのスキーマにシリアライズ持ってます。

シリアライズと言って、あなたが公式のシリアル化メカニズムを使用するか、または同様の効果を得る意味するのですか?

あなたのオブジェクトがBeanがある場合は、クラスを取り、そのクラス名とプロパティ書き留め一般的なサービスを記述するためにリフレクションを使用することができます。それは同様にXMLから資料を読み、(ApacheのDigesterのは基本的に何をするかである)オブジェクトを生成することができます。

何ジョナサン・ホランドは述べています。

しかし、あなたはまた、検証について尋ねました。あなたはジョナサンが掲載コードを使用する場合は、あなたのすべてのプロパティは、<全角> のシリアライズと正しくデシリアライズされます。あなたが本当にそれを確認したい場合しかし、あなたが検証したい*の.xsdスキーマのためのあなたのXmlSerializerオブジェクトに設定できるプロパティがあります。あなたは、Visual Studioに含まれているxsd.exeコマンドラインツールを使用して簡単には十分あなたのクラスからのスキーマを作成することができます。

あなたは、クラスの特定のプロパティは、属性または要素としてシリアル化されているかどうかを制御したい場合がありますように。また、それが聞こえます。ジョナサンはそれに触れたが、私は一例を示したいと思います。

[Serializable]
public class FormElement
{
   [XmlAttribute]
   public string Name {get; set;};

   [XmlAttribute]
   public int Sequence {get; set;};

   [XmlAttribute]
   public string Value {get; set;};

   [XmlElement]
   public Validation OnValidate{get; set;}

   [NonSerialized]
   public string UnimportantProperty {get; set;};

}

最後に、あなたもシリアライズ可能である必要がありますシリアライズするすべてのプロパティのタイプ、および複雑なタイプはXmlElementsとしてシリアライズする必要があります。そうでなければ、あなたはそれを行うことができなくなります。

XStreamののちょうどそれを行うためのかなり良いのJavaライブラリです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top