将对象序列化为XML以获取名为字段值的标记列表

rot*_*man 2 c# xml serialization

我有2个班:

public class LocalizationEntry
{
    public List<TranslationPair> Translations
    {
        get;
        set;
    }
}

public class TranslationPair
{
    public string Language
    {
        get;
        set;
    }

    public string Translation
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用标准串行器获得这样的XML?

<LocalizationEntry>
    <Translations>
        <EN>apple<EN>
        <PL>jab?ko<PL>
        <DE>apfel<DE>
    </Translations>
</LocalizationEntry>
Run Code Online (Sandbox Code Playgroud)

我正在考虑类似XmlArrayItem(ElementName=this.Language)属性的东西但当然这种构造是非法的,除了在运行时无法确定属性值.

谢谢你的帮助.当然我可以使用其他结构,但我很好奇是否可能.

Mar*_*ell 5

自定义元素名称是一种痛苦; 我会忘记XmlSerializer这里,因为你必须使用IXmlSerializable这是一个皇家的痛苦.我会改用XElement:

var source = new LocalizationEntry {
    Translations = new List<TranslationPair> {
        new TranslationPair {Language="EN", Translation="apple"},
        new TranslationPair {Language="PL", Translation="jab?ko"},
        new TranslationPair {Language="DE", Translation="apfel"},
     }
};

var el = new XElement("LocalizationEntry",
    new XElement("Translations",
        from pair in source.Translations
        select new XElement(pair.Language, pair.Translation)));

var xml = el.ToString();
Run Code Online (Sandbox Code Playgroud)