gpt4 book ai didi

c# - 将命名空间前缀添加到 XmlRoot 属性

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:58 25 4
gpt4 key购买 nike

:我正在开发一个 .Net web api,我们有一个基类来处理来 self 们 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>

我有以下返回上述罚款的代码:

[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}

所以不管返回数据的根标签是什么,都会一直改成“Content”。因此,如果我的代码中的 T 是一个 PersonList,它将在 XML 中更改为“Content”。这是为了让我们的回复保持一致。

现在我需要为标签添加前缀。 "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>

每个接近我要求的问题都提供了在代码中添加前缀的解决方案。

我想知道是否有办法使用属性来做到这一点?

Here is a similar question that was never answered

编辑:将 ri: 添加到 XmlRoot 属性的 ElementName 不起作用。

[XmlRoot(ElementName = "ri:Content", Namespace = "http://www.example.com/schemas/TestNamespace/Interface6/Schema.xsd")]

返回为:

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

最佳答案

简短的回答是不,您目前不能通过 XML 序列化属性添加 namespace 前缀。

属性仅描述 XML 文档的结构。命名空间前缀在很大程度上与 XML DOM 无关——重要的是元素具有正确的命名空间。前缀仅对该文档的文本表示感兴趣,这完全是一个格式化问题,并且超出了序列化属性目的的范围。

如果您需要控制正在写入的 XML 文本的格式,则需要控制格式化过程,这需要您修改执行序列化的代码。

参见 XML Serialization and namespace prefixes一个非常简单的例子,说明如何实现你想要的。

关于c# - 将命名空间前缀添加到 XmlRoot 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com