8

私のシリアル化コードはこのようなものです..

public class slab
{
    public int lowerlimit {get; set;}
    public int upperlimit { get; set; }
    public int percentage { get; set; }

}

public class Details
{
    static void Main(string[] args)
    {
        slab s= new slab();
        s.lowerlimit = 0;
        s.upperlimit = 200000;
        s.percentage = 0;
        XmlSerializer serializer = new XmlSerializer(s.GetType());
        StreamWriter writer = new StreamWriter(@"filepath");
        serializer.Serialize(writer.BaseStream, s);
    }
}

正常に動作しており、出力ファイルを次のように取得しています。

<?xml version="1.0"?>
<slab xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <lowerlimit>0</lowerlimit>
    <upperlimit>200000</upperlimit>
    <percentage>0</percentage>
</slab>

しかし、複数のオブジェクトをシリアライズするにはどうすればよいでしょうか? 出力ファイルを次のように取得したい

<slabs>
    <slab>
        <lowerlimit>0</lowerlimit>
        <upperlimit>200000</upperlimit>
        <percentage>0</percentage>
    </slab>
    <slab>
        <lowerlimit>200000</lowerlimit>
        <upperlimit>500000</upperlimit>
        <percentage>10</percentage>
    </slab>
    <slab>
        <lowerlimit>500000</lowerlimit>
        <upperlimit>1000000</upperlimit>
        <percentage>20</percentage>
    </slab>
    <slab>
        <lowerlimit>1000000</lowerlimit>
        <upperlimit>0</upperlimit>
        <percentage>30</percentage>
    </slab>
</slabs>
4

4 に答える 4

10

XML ファイルは常に単一のルート要素を必要とするため、実際に必要な出力形式は有効な XML ではありません。slabs をリスト ( ) に入れてList<Slab> slabs = new List<Slab>();シリアル化することもできますが、おそらく次のような出力が得られます。

<slabs>
    <slab>
    <lowerlimit>0</lowerlimit>
    <upperlimit>200000</upperlimit>
    <percentage>0</percentage>
    </slab>

    <slab>
    <lowerlimit>200000</lowerlimit>
    <upperlimit>500000</upperlimit>
    <percentage>10</percentage>
    </slab>

    <slab>
    <lowerlimit>500000</lowerlimit>
    <upperlimit>1000000</upperlimit>
    <percentage>20</percentage>
    </slab>

    <slab>
    <lowerlimit>1000000</lowerlimit>
    <upperlimit>0</upperlimit>
    <percentage>30</percentage>
    </slab>
</slabs>

EDIT
シリアライズの別の方法は、シリアライザーにルート要素について詳しく伝えることです。

List<Slab> slabs = new List<Slab>();
slabs.Add(...);

XmlSerializer serializer = new XmlSerializer(slabs.GetType(), new XmlRootAttribute("slabs"));
StreamWriter writer = new StreamWriter(@"filepath");
serializer.Serialize(writer.BaseStream, slabs);
于 2013-03-06T12:18:07.857 に答える
1

次のコードを利用できます。

List<Slab> listSlabs = new List<Slab>();
//add Slab to listSlabs

リストをシリアル化できます。

于 2013-03-06T12:17:37.500 に答える
1

適切にカプセル化し、型名を確実にするために、.slabs だけを含む新しいオブジェクトを作成できますList<Slab>。この新しいオブジェクトにスラブを追加し、シリアル化します。

于 2013-03-06T12:36:03.113 に答える
0

使用する

XmlSerializer serializer = new XmlSerializer(**slabs**.GetType(), new XmlRootAttribute("slabs"));

それ以外の

XmlSerializer serializer = new XmlSerializer(s.GetType(), new XmlRootAttribute("slabs"));
于 2014-07-24T16:02:36.077 に答える