从 webapi 中删除 xmlns:i 和 xmlns
Remove xmlns:i and xmlns from webapi
我被要求提供来自 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>
然而网络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>
我有 google 并尝试了各种修复但无济于事,我的模型看起来像
[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:i
和xmlns
并替换为xmlns:xsd
和xmlns:xsi
?
我知道这是一个糟糕的问题,因为这不重要,但我的消费客户正在呕吐。
如果您需要 XML 看起来完全一样,那么 XmlSerializer
可能会更好。 DataContractSerializer
不会给你相同级别的控制,因为它假设你在两端都使用它。
也就是说,我认为您的消费客户端是 'barfing',因为这两个实例在语义上是不同的。第一个有一个空的默认命名空间,第二个有一个默认命名空间 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>
我被要求提供来自 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>
然而网络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>
我有 google 并尝试了各种修复但无济于事,我的模型看起来像
[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:i
和xmlns
并替换为xmlns:xsd
和xmlns:xsi
?
我知道这是一个糟糕的问题,因为这不重要,但我的消费客户正在呕吐。
如果您需要 XML 看起来完全一样,那么 XmlSerializer
可能会更好。 DataContractSerializer
不会给你相同级别的控制,因为它假设你在两端都使用它。
也就是说,我认为您的消费客户端是 'barfing',因为这两个实例在语义上是不同的。第一个有一个空的默认命名空间,第二个有一个默认命名空间 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>