1

クラスを作成します (FormElement と呼びます)。そのクラスには、データ要素 (名前、シーケンス番号、値 — これは単なる文字列など) と共に持っているメタデータのようないくつかのプロパティが必要です。

このクラスには、Validation Application Block Validation クラスの属性があります。

それをxmlにシリアライズしてデシリアライズしたい。検証アプリケーション ブロックの属性を含むクラスのすべてのプロパティがシリアル化に耐えられることを確認します。

いくつかの提案?

4

4 に答える 4

3

.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] 属性を使用して、選択したスキーマにシリアル化することができます。

于 2008-12-26T16:06:31.020 に答える
0

シリアル化とは、公式のシリアル化メカニズムを使用することを意味しますか、それとも同様の効果を達成することを意味しますか?

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

于 2008-12-24T05:22:57.360 に答える
0

ジョナサン・ホランドが言ったこと。

ただし、検証についても尋ねました。Jonathan が投稿したコードを使用すると、すべてのプロパティ正しくシリアル化および逆シリアル化されます。ただし、本当に確認したい場合は、XmlSerializer オブジェクトで設定して、*.xsd スキーマに対して検証できるプロパティがあります。xsd.exeVisual Studio に含まれているコマンド ライン ツールを使用すると、クラスから簡単にスキーマを作成できます。

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

[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 としてシリアル化する必要があります。そうでなければ、あなたはそれをすることができません。

于 2008-12-26T16:34:00.123 に答える
-1

XStreamは、まさにそれを行うための非常に優れた Java ライブラリです。

于 2008-12-24T05:38:11.900 に答える