質問

私のアプリケーションでは、私はPacketListクラスとPacketクラスを持っています。私は、所望の出力のような何かを思い付くPacketListにシリアライズヘルパーを使用できるようにしたいが、何の方向に行くようには考えていると思います。

私は、データを送信するための特有のプロトコルを持つサーバを模倣するプログラムを書いています。

クライアントは、形式でデータを送信しますCOMMAND|ARGUMENT_0|ARGUMENT_1|ARGUMENT_2|...|ARGUMENT_N\0COMMANDMOVEまたはLOGINようなものになる可能性がどこます。

サーバは形式に対応します:

<p c='COUNT'>
    <m p='N' p0='COMMAND_0' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
    <m p='N' p0='COMMAND_1' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
    <m p='N' p0='COMMAND_2' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
    <m p='N' p0='COMMAND_3' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
    ...
    <m p='N' p0='COMMAND_COUNT' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
</p>

どこCOMMAND_0UPDATE_POSITIONまたはAUTHENTICATEDのようなものになる可能性があります。

はい、これは物事の愚かな方法です。それがこのように行われている理由はありません、私は知りません。いいえ、私はそれを変更することはできません。

とにかく、私は、サーバーは、クライアントにパケットを送信する方法をエミュレートするために探しています。私は今のところ得ていることはあります:

XmlWriterSettings _Settings = new XmlWriterSettings {
    OmitXmlDeclaration = true,
    Indent = true
};
StringBuilder _Xml = new StringBuilder();
XmlWriter _Writer = XmlWriter.Create(_Xml, _Settings);
_Writer.WriteStartElement("p");
    _Writer.WriteAttributeString("c", "1");
    _Writer.WriteStartElement("m");
        _Writer.WriteAttributeString("p", "2");
        _Writer.WriteAttributeString("p0", "COMMAND");
        _Writer.WriteAttributeString("p1", "ARGUMENT_0");
        _Writer.WriteAttributeString("p2", "ARGUMENT_1");
    _Writer.WriteEndElement(); // </m>
_Writer.WriteEndElement(); // </p>
_Writer.Flush();
Console.WriteLine(_Xml.ToString());

この正常に動作し、出力ます:

<p c="1">
  <m p="2" p0="COMMAND" p1="ARGUMENT_0" p2="ARGUMENT_1" />
</p>

しかし、私はクリーンな方法でこれを実装したいと思います。

私のPacketListは、基本的にPacketsのリストが含まれ、そしてPacketString _CommandString[] _Argumentsが含まれています。

誰もが正しい方向に私を導くことができれば、

それははるかに高く評価されるだろう。

役に立ちましたか?

解決

あなたは現在、それをやっている方法がベストです。など、私は属性が出力をフォーマットする方法を制御する属性*のXmlSerializerを使用して、適切なXMLを使用してパケットとPacketListクラスのプロパティを飾るためにと言うだろうが、あなたは、コレクション(P0、P1、P2に対応する属性を記述する必要があるため。)これは動作しません。

あなたは、このような奇妙なフォーマットを記述する必要があるので、

、それは手動であなたが現在いる方法でそれを書くことは理にかなっています。

アンドリュー

他のヒント

I二アンドリューの答えます。

私の知る限り、あなたはデータ要素の二つのレベルを構成するので、あなたは、あなた自身のシリアライザを書く場合を除き、それを行うための方法はありません(要素の動的な数で!)の単一のXML要素にの属性として。よく、XmlSerializerをを必要とする、そこにそれをやっても意味がないのです、とのだけでリフレクションを使用して動作するために、いくつかのの感覚ます。

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