0

連載すると・・・

public class SpeedDial
{
    public string Value { get; set; }
    public string TextTR { get; set; }
    public string TextEN { get; set; }
    public string IconId { get; set; }
}

その結果:

<SpeedDial>
    <Value>110</Value>
    <TextTR>Yangın</TextTR>
    <TextEN>Fire</TextEN>
    <IconId>39</IconId>
</SpeedDial>

しかし、私が欲しいのはこれです:

  <speedDial>
    <value>110</value>
    <text>
      <TR>Yangın</TR>
      <EN>Fire</EN>
    </text>
    <iconId>39</iconId>
  </speedDial>

私は標準的な方法を学びたいです...

4

3 に答える 3

2

次の 3 つのアプローチが思い浮かびます。

1: シリアル化に使用するプロパティを作成し、他のプロパティを非表示にします[XmlIgnore] 2: 実装IXmlSerializableして自分で行います 3: シリアル化のためだけに別の DTO を作成します

XmlSerializer元のパブリック AIP を保持しながら、「テキスト」部分を好きなオブジェクトにリファクタリングする例を次に示します。

[Serializable]
public class SpeedDial
{
    static void Main()
    {
        XmlSerializer ser = new XmlSerializer(typeof(SpeedDial));
        SpeedDial foo = new SpeedDial { Value = "110", TextTR = "Yangin",
            TextEN = "Fire", IconId = "39" };
        ser.Serialize(Console.Out, foo);
    }
    public SpeedDial()
    {
        Text = new SpeedDialText();
    }

    [XmlElement("text"), EditorBrowsable(EditorBrowsableState.Never)]
    public SpeedDialText Text { get; set; }

    public string Value { get; set; }
    [XmlIgnore]
    public string TextTR
    {
        get { return Text.Tr; }
        set { Text.Tr = value; }
    }
    [XmlIgnore]
    public string TextEN
    {
        get { return Text.En; }
        set { Text.En = value; }
    }

    public string IconId { get; set; }
}
[Serializable]
public class SpeedDialText
{
    [XmlElement("EN")]
    public string En { get; set; }
    [XmlElement("TR")]
    public string Tr { get; set; }
}
于 2008-11-14T15:01:59.097 に答える
1

シリアライザーをビジネスオブジェクトに依存させるため、私があなただったらやりません。小文字の場合は、xml-customattributes を使用できます。

于 2008-11-14T14:54:53.013 に答える
0
public class SpeedDial
{
    public string Value { get; set; }
    public TextClass text;
    public string IconId { get; set; }
}

public class TextClass
{
    public string TR { get; set; }
    public string EN { get; set; }
}
于 2008-11-14T15:11:26.457 に答える