gpt4 book ai didi

c# - 删除 xmlns :i and xmlns from webapi

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:25 27 4
gpt4 key购买 nike

有人要求我从 http 端点提供以下 XML 文档,完全像:-

<?xml version="1.0" encoding="utf-8"?> 
<XMLFile xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SalesOrders>
...
</SalesOrders>

但是 Web API 吐出

<?xml version="1.0" encoding="utf-8"?>
<XMLFile xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/White.Label.Ordering.Infrastructure.Data.Queries.Export">
<SalesOrders>
...
</SalesOrders>

我用谷歌搜索并尝试了各种修复但无济于事,我的模型看起来像

[DataContract]
public class XMLFile
{
[DataMember]
public List<SalesOrder> SalesOrders { get; set; }
}

[DataContract]
public class SalesOrder
{
[DataMember(Order = 1)]
public string OrderNumber { get; set; }
}

我的设置是这样的

    public static void Register(HttpConfiguration config)
{
config.Formatters.XmlFormatter.WriterSettings.OmitXmlDeclaration = false;
...

}

如何删除 xmlns:ixmlns 并替换为 xmlns:xsd xmlns:xsi?

我知道这是个糟糕的问题,因为这不重要,但我的消费客户正在吐槽。

最佳答案

如果您需要您的 XML 看起来完全一样,那么使用 XmlSerializer 可能会更好。 DataContractSerializer 不会为您提供相同级别的控制,因为它假定您在两端都使用它。

也就是说,我认为您的消费客户端正在“呕吐”,因为这两个实例在语义上是不同的。第一个有一个空的默认命名空间,第二个有一个默认命名空间 http://schemas.datacontract.org/2004/07/White.Label.Ordering.Infrastructure.Data.Queries.Export .

这应该是您唯一需要更正的地方,您可以通过设置 DataContract 的命名空间来完成。

[DataContract(Namespace="")]
public class XMLFile
{
[DataMember]
public List<SalesOrder> SalesOrders { get; set; }
}

[DataContract(Namespace="")]
public class SalesOrder
{
[DataMember(Order = 1)]
public string OrderNumber { get; set; }
}

这会给你:

<?xml version="1.0" encoding="utf-8"?>
<XMLFile xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<SalesOrders>
...
</SalesOrders>
</XMLFile>

关于c# - 删除 xmlns :i and xmlns from webapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40364359/

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