将对象序列化为XML时添加自定义属性

时间:2017-09-11 13:39:34

标签: c# xml xml-serialization

是否可以为C#对象模型设置声明性标记,以便生成如下内容:

  ...
  <locales>
    <add d5p1:Transform="Insert" Locator="asdasdf" id="698" code="tr" name="Turkish" xmlns:d5p1="xdt" />
    <add id="701" code="fr" name="French" />
  </locales>
  ...

而不是:

public class BaseTransformation
{
    [XmlAttribute]
    public string IsDefault { get; set; }

    [XmlAttribute(Namespace ="xdt")]
    public string Transform { get; set; }

    //[XmlAttribute("Locator")]
    public string Locator { get; set; }       
}


public class Locale : BaseTransformation
{
    [XmlAttribute("id")]
    public long ID { get; set; }

    [XmlAttribute("code")]
    public string Code { get; set; }

    [XmlAttribute("name")]
    public string Name { get; set; }
}


public class Languages
{
    [XmlArray(ElementName = "locales")]
    [XmlArrayItem(ElementName = "add")]
    public Locale[] Locales { get; set; }
}

我的代码的一个简单示例是:

CountdownLatch

我正在尝试动态生成web.config转换。 的 d5p1:变换=&#34;插入&#34; xmlns:d5p1 =&#34; xdt&#34; 这两个无法识别 在构建时,不会应用与预期相同的功能。

1 个答案:

答案 0 :(得分:2)

您将XML名称空间前缀与实际名称空间混淆。在Namespace的{​​{1}}属性中,指定完整的实际命名空间,而不是为该命名空间定义的前缀。命名空间前缀是任意的,您可以使用XmlAttribute属性在特定命名空间中使用您希望的任何前缀。序列化认为你在谈论名为&#34; xdt&#34;的命名空间,而不是实际命名空间&#34; xdt&#34;命名空间通常指:&#34; http://schemas.microsoft.com/XML-Document-Transform&#34;

xmlns