これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドgenxです。
プログラム:
NAME
genxs-MonoのXmlシリアライザージェネレーター
SYNOPSIS
ゲンクス 構成ファイル [宛先フォルダー]
DESCRIPTION
ゲンクス は、クラスのカスタムXMLシリアル化ライターおよびリーダーを生成するためのツールです。
構成ファイル は、次のようないくつかの情報を指定する構成ファイルです。
リーダーとライターを生成するクラス、クラスの名前と名前空間
生成するフックと適用するフックのコレクション。 フックを使用することにより、
生成されたファイルを変更することなく、シリアライザーの動作をカスタマイズします。
ソースクラスが変更された場合は、安全に再生成できます。
移動先フォルダ ファイルが生成されるフォルダーを指定します。
注意: このツールは、Monoランタイムでのみ実行されます。これは、一部の内部クラスを使用していないためです。
他のランタイムで利用できます。
CONFIGURATION FILE FORMAT
設定ファイルは、次の文法に基づくxmlドキュメントです(「?」は
オプション、「*」0以上):
*
名前?
名前?
名前?
名前?
?
*
?
*
構成ファイルには、複数の「シリアライザー」要素を含めることができます。各要素は、
いくつかの生成オプションとともにシリアライザーを生成するクラス。 NS
ソースクラスは、次の属性で指定されます。
* class :クラスの名前(名前空間を含む)。
* アセンブリ :アセンブリ名。 完全なパスを含めることができます。
生成オプションは子要素で指定されます。
* 読者 :リーダークラスの名前。
* リーダーなし :「true」の場合、リーダークラスは生成されません。
* 作家 :ライタークラスの名前。
* ベースシリアライザー :基本xmlシリアライザークラスの名前。 このアイテムは2.0のみです。
* 実装 :シリアライザー実装クラスの名前。 このアイテムは2.0のみです。
* ライターなし :「true」の場合、ライタークラスは生成されません。
* 名前空間 :リーダークラスとライタークラスの名前空間。
* 内部として生成 :「true」の場合、クラスを内部として生成します。
* 出力ファイル名 :生成されたファイルの名前。
* リーダーフック :リーダーに適用するフックのリスト。
* ライターフック :ライターに適用するフックのリスト。
指定する フック
フックを使用すると、リーダーとライターの動作をカスタマイズできます。 フック仕様
この文法に従います:
?
名前?
名前*
名前?
ソースコード?
ソースコード?
ソースコード?
「type」属性は、フックが適用されるコンテキストを指定します。 それはのXNUMXつである可能性があります
以下
* 属性 :属性がシリアル化/逆シリアル化される場合にフックが適用されます。
* 要素は :要素がシリアル化/逆シリアル化される場所にフックが適用されます。
* 不明な属性 :不明な属性が処理される場所にフックが適用されます。
* 未知の要素 :未知の要素が処理される場所にフックが適用されます。
* メンバー :フックは、メンバーがシリアル化/逆シリアル化される場合に適用されます。
* type :フックはタイプ全体に適用されます。
「select」要素は、フックを追加する必要のあるクラスとメンバーを指定します。
次の要素を含めることができます。
* タイプ名 :その名前のクラスが選択されます(名前空間を含める必要があります)
* タイプ属性 :その属性が適用されているすべてのクラスが選択されます
(名前空間を含む完全な属性クラス名を指定します)。 いくつかの属性名
指定できます。
* タイプメンバー :フックを追加する必要があるクラスメンバーの名前。
フックのソースコードは、次の要素のいずれかを使用して指定できます。
* replace :提供されたソースコードがすべてのシリアル化/逆シリアル化を置き換えます
フックコンテキストでの操作。
* 挿入前 :ソースコードはフックコンテキストの前に追加されます。
* 挿入後 :ソースコードはフックコンテキストの後に追加されます。
フックのコードを書くときは、定義されているいくつかの特別な変数を使用できます
コード生成プロセス中。 変数は次のとおりです。
* $ TYPE: 生成されるクラスの名前(名前空間なし)。
* $ FULLTYPE: 名前空間を含む、生成されるクラスのフルネーム。
* $ OBJECT: シリアル化または逆シリアル化されるオブジェクト。 交換用リーダーを使用する場合
タイプ「type」のフックの場合、フックコードは逆シリアル化されたオブジェクトをこれに割り当てる必要があります
変数に保存します.
* -I $ ELEMENT:シリアル化/逆シリアル化されるオブジェクトの要素の名前。
* $ NAMESPACE: シリアル化/逆シリアル化されるオブジェクトの要素の名前空間。
* $ MEMBER: シリアル化/逆シリアル化されるメンバーの名前。 「メンバー」でのみ有効
コンテキスト。
HOOK 例
次の例では、任意のデシリアライズ後にValidateメソッドへの呼び出しを追加します
オブジェクト:
System.Xml.Schema.XmlSchema.Validate $ TYPE($ OBJECT);
この例では、XmlSchemaクラスを逆シリアル化するために使用されるコードを指定します。
System.Xml.Schema.XmlSchema
$ OBJECT = System.Xml.Schema.XmlSchema.Read(Reader、null);
これは、XmlSchemaインスタンスの読み取りに使用されるコードを指定します。
System.Xml.Schema.XmlSchema
$ OBJECT.Write(ライター);
このXNUMXつのフックを使用すると、シリアライザーはクラスをシリアル化するときにいくつかの情報を出力します
"私のクラス":
MyNamespace.MyClass
Console.WriteLine( "Serializing MyClass");
Console.WriteLine( "MyClassシリアル化");
MyNamespace.MyClass
Console.WriteLine( "シリアル化されたメンバー$ MEMBER");
このフックは、カスタム属性を持つすべてのタイプに追加の要素を書き込みます
「MyAttribute」:
MyNamespace.MyAttribute
Writer.WriteStartElement( "privateData");
Writer.WriteString($ OBJECT.PrivateData);
Writer.WriteEndElement();
CONFIGURATION FILE 実施例
これは、ServiceDescriptionのシリアライザーを生成するために使用される構成ファイルです。
ServiceDescriptionReaderBase
ServiceDescriptionWriterBase
System.Web.Services.Description
ServiceDescriptionSerializerBase.cs
System.Web.Services.Configuration.XmlFormatExtensionPointAttribute
ServiceDescription.ReadExtension(Reader、$ OBJECT);
System.Xml.Schema.XmlSchema
$ OBJECT = System.Xml.Schema.XmlSchema.Read(Reader、null);
System.Web.Services.Configuration.XmlFormatExtensionPointAttribute
ServiceDescription.WriteExtensions(ライター、$ OBJECT);
System.Xml.Schema.XmlSchema
$ OBJECT.Write(ライター);
作者
Lluis Sanchez Gual([メール保護])
onworks.netサービスを使用してオンラインでgenxを使用する