0

Hai All 次の形式の XML ファイルを作成したい

<myFiles>
<name>myname</name>
<place>myplace</place>
<mydata>
    <today>1-1-2011</today>
    <time>1 PM</time>
    <driving>
       <car>audi</car>
       <bus>volvo</bus>
    </driving>
</mydata>
<mydata>
    <today>1-1-2011</today>
    <time>1 PM</time>
    <driving>
      <car>audi</car>
      <bus>volvo</bus>             
    </driving>
</mydata>
</myFiles>

これを作成するために私は使用しています

class myfile
{
public string name {get;set;}
public string place {get;set;}
public list<mydata> mydata {get;set;}
}

次に、私が使用しているXML構築用のpublic claa mydata { ...... }

static public void SerializeToXMLList(List<Movie> movies)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Movie>));
TextWriter textWriter = new StreamWriter(@"C:\movie.xml");
serializer.Serialize(textWriter, movies);
textWriter.Close();
}

しかし、次のような出力が得られます

<myFiles>
<name>myname</name>
<place>myplace</place>
<mydata>
   <mydata>
   <today>1-1-2011</today>
   <time>1 PM</time>
   <driving>
     <car>audi</car>
     <bus>volvo</bus>
   </driving>
   </mydata>
   <mydata>
   <today>1-1-2011</today>
   <time>1 PM</time>
   <driving>
      <car>audi</car>
      <bus>volvo</bus>
   </driving>
</mydata>
</mydata>
</myFiles>

そのため、クラス名を持つmydataリストにリストの数がありました

どうすればそれを回避できますか...、誰か知っているなら、plsが私を助けて..

4

2 に答える 2

2

その理由は、「mydata」というプロパティがあり、その中のオブジェクトのタイプが「mydata」であるためです。

実際には、このような要素に配列を含めることをお勧めします。正直に言うと、'mydatacollection' や 'mydatalist' など、より適切なプロパティ名を選択する必要がありますが、実際には、得られるレイアウトはより良いものになると思います。

ただし、シリアライゼーションを制御するために使用できる属性の詳細については、http: //msdn.microsoft.com/en-us/library/2baksw0z%28v=vs.80%29.aspx#Y570を参照してください。

@Totero は、本当にこれをやりたい場合は、この件に関する別の良い質問へのリンクを投稿しました。

于 2012-06-12T08:37:25.720 に答える
1

ネストされたコンテナーを作成する理由は、mydata オブジェクトの配列 mydata があるためです。

<mydata>
   <mydata>
   ....
   </mydata>
</mydata>

これを表す正しい方法です。必要な正確な形式でファイルを取得する最も簡単な方法は、配列の名前を「EraseTag」などに変更することです。XML ファイルをテキスト ファイルとして開き、 のすべてのインスタンスを削除します"<EraseTag>"

ただし、あなたが与えた2番目のシリアル化された例は正しいので、逆シリアル化によってオブジェクト形式に戻すことができることを繰り返したいと思います。

これらのタグをシリアライゼーション フェーズから除外したい場合は、次の投稿を参照する必要があります。

XML デシリアライゼーションとルース配列項目

[Serializable]クラスの周りにタグを追加します。

于 2012-06-12T08:38:09.530 に答える