2012-02-09 12 views
3

私はこのXMLを持っています。c#XMLのシリアル化

<ChartXml> 
    <Category type="xAxis"> 
     <Value>Mon</Value> 
     <Value>Tue</Value> 
     <Value>Wed</Value> 
     <Value>Thurs</Value> 
     <Value>Friday</Value> 
    </Category> 
</ChartXml> 

このクラス構造。私はChartXmlオブジェクトにXMLをシリアル化しようとすると、

[XmlRoot("ChartXml")] 
public class ChartXml 
{ 
    [XmlElement("Category")] 
    public Category Category;    
} 

public class Category 
{   
    [XmlAttribute("type")] 
    public string Type;   
    [XmlArray("Value")] 
    public List<string> Values; 
} 

は今、私が正しく設定type属性を持つカテゴリーを含むオブジェクトを取得しますが、私は、文字列の私のリストを取得いけません。

私は自分のクラスを設定した方法に何か間違っていると思っています。

ありがとう、 james。代わりに[XmlArray("Value")]、例えばの

+1

この種の問題を識別する最も良い方法は、実際にシリアル化ロジックを逆にすることです。 XMLにあるデータと一致するデータでオブジェクトを作成します。次に、シリアル化して、デシリアライズしたいデータと同じ出力にします。 この方法では、プロパティに適用できる使用可能な属性の効果を実際に「見る」ことができます。 同じものをシリアル化する場合は、逆シリアル化することもできます。 – Aphelion

+0

それ、私はそれを行ってあげるよ。 – Cadab

答えて

3

使用[XmlElement("Value")]

[XmlRoot("ChartXml")] 
public class ChartXml 
{ 
    [XmlElement("Category")] 
    public Category Category; 
} 

public class Category 
{ 
    [XmlAttribute("type")] 
    public string Type; 

    [XmlElement("Value")] 
    public List<string> Values; 
} 

シリアライズ:

var obj = new ChartXml { Category = new Category { Type = "t", Values = new List<string> { "a", "b", "c" } } }; 
var ser = new XmlSerializer(obj.GetType()); 

using (var tw=new StringWriter()) 
{ 
    ser.Serialize(tw, obj); 

    Console.WriteLine(tw.ToString()); 
} 

出力:

<?xml version="1.0" encoding="utf-16"?> 
<ChartXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http: 
//www.w3.org/2001/XMLSchema"> 
    <Category type="t"> 
    <Value>a</Value> 
    <Value>b</Value> 
    <Value>c</Value> 
    </Category> 
</ChartXml> 
+1

ありがとう、素晴らしい仕事。私はリストであると思っていました。私はそれがアレイであると言いたいと思っていました。明らかにそうではありませんでした。 :) – Cadab

+0

@Cadab、ようこそ。 –

+0

@downvoter、Care to comment? –

0

使用[のXmlElement( "値")]の代わりに[XmlArray ( "値")]