将对象序列化为 XML 时添加自定义属性
Add custom attributes when serializing Object to XML
是否可以对 C# 对象模型进行声明性标记以生成如下内容:
...
<locales>
<add id="698" code="tr" name="Turkish" xsd:Transform="Insert"/>
<add id="701" code="fr" name="French" />
</locales>
....
而不是:
...
<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; }
}
我正在尝试动态生成 web.config 转换。
d5p1:Transform="Insert" xmlns:d5p1="xdt" 这两个认不出来
在构建中并且不应用与预期相同的功能。
您将 XML 命名空间前缀与实际命名空间混淆了。在 XmlAttribute
的 Namespace
属性 中,您指定了完整的实际名称空间,而不是您为该名称空间定义的前缀。命名空间前缀是任意的,您可以使用 xmlns
属性将任何前缀用于特定的命名空间。序列化认为您正在谈论一个名为 "xdt" 的名称空间,而不是 "xdt" 名称空间通常指的实际名称空间:“http://schemas.microsoft.com/XML-Document-Transform”
[XmlAttribute(Namespace = "http://schemas.microsoft.com/XML-Document-Transform")]
public string Transform { get; set; }
是否可以对 C# 对象模型进行声明性标记以生成如下内容:
...
<locales>
<add id="698" code="tr" name="Turkish" xsd:Transform="Insert"/>
<add id="701" code="fr" name="French" />
</locales>
....
而不是:
...
<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; }
}
我正在尝试动态生成 web.config 转换。 d5p1:Transform="Insert" xmlns:d5p1="xdt" 这两个认不出来 在构建中并且不应用与预期相同的功能。
您将 XML 命名空间前缀与实际命名空间混淆了。在 XmlAttribute
的 Namespace
属性 中,您指定了完整的实际名称空间,而不是您为该名称空间定义的前缀。命名空间前缀是任意的,您可以使用 xmlns
属性将任何前缀用于特定的命名空间。序列化认为您正在谈论一个名为 "xdt" 的名称空间,而不是 "xdt" 名称空间通常指的实际名称空间:“http://schemas.microsoft.com/XML-Document-Transform”
[XmlAttribute(Namespace = "http://schemas.microsoft.com/XML-Document-Transform")]
public string Transform { get; set; }