str*_*ica 3 c# xml asp.net-web-api
:ri我正在开发一个 .Net web api,我们有一个基类来处理来自我们 api 的所有响应。此类将始终作为请求的根返回,其中包含用户请求的任何数据。
因此,用户将始终收到以下内容的响应:
<Content xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.example.com/schemas/TestNamespace/Interface6/Schema.xsd">
<Item>Information Here</Item>
</Content>
Run Code Online (Sandbox Code Playgroud)
我有以下代码返回上述罚款:
[XmlRoot(ElementName = "Content", Namespace = "http://www.example.com/schemas/TestNamespace/Interface6/Schema.xsd")]
public class MyResponse<T> : IMyResponse<T>
where T : class
{//rest of class}
Run Code Online (Sandbox Code Playgroud)
所以无论返回数据的根标签是什么,它都会被改成“Content”。因此,如果我的代码中的 T 是 PersonList,它会在 XML 中更改为“内容”。这是为了在我们的回复中提供一致性。
现在我需要为标签添加一个前缀。“ri:”所以收到的回复将是:
<ri:Content xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ri="http://www.example.com/schemas/TestNamespace/Interface6/Schema.xsd">
<Item>Information Here</Item>
</ri:Content>
Run Code Online (Sandbox Code Playgroud)
每个接近我需要的问题都提供了在代码中添加前缀的解决方案。
我想知道是否有办法使用属性来做到这一点?
编辑:将 ri: 添加到 XmlRoot 属性的 ElementName 不起作用。
[XmlRoot(ElementName = "ri:Content", Namespace = "http://www.example.com/schemas/TestNamespace/Interface6/Schema.xsd")]
Run Code Online (Sandbox Code Playgroud)
返回为:
<ri_x003A_Content xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.example.com/schemas/TestNamespace/Interface6/Schema.xsd">
<Item>Information Here</Item>
</ri_x003A_Content>
Run Code Online (Sandbox Code Playgroud)
简短的回答是否定的,您目前无法通过 XML 序列化属性添加命名空间前缀。
这些属性仅描述XML 文档的结构。命名空间前缀在很大程度上与 XML DOM 无关——重要的是元素具有正确的命名空间。前缀只对该文档的文本表示感兴趣,这完全是一个格式问题,超出了序列化属性目的的范围。
如果您需要控制正在写入的 XML 文本的格式,则需要控制格式化过程,这需要您修改执行序列化的代码。
请参阅XML 序列化和命名空间前缀以获取有关如何实现所需内容的非常简单的示例。
| 归档时间: |
|
| 查看次数: |
18852 次 |
| 最近记录: |