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

三种方法跃入脑海:

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 回答