Rip*_*ppo 5 c# xml xml-deserialization asp.net-web-api
我被要求从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>
Run Code Online (Sandbox Code Playgroud)
但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>
Run Code Online (Sandbox Code Playgroud)
我有谷歌并尝试各种修复,但无济于事,我的模型看起来像
[DataContract]
public class XMLFile
{
[DataMember]
public List<SalesOrder> SalesOrders { get; set; }
}
[DataContract]
public class SalesOrder
{
[DataMember(Order = 1)]
public string OrderNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的设置就像这样
public static void Register(HttpConfiguration config)
{
config.Formatters.XmlFormatter.WriterSettings.OmitXmlDeclaration = false;
...
}
Run Code Online (Sandbox Code Playgroud)
如何做我删除xmlns:i,并xmlns与更换xmlns:xsd和xmlns:xsi?
我知道这是一个不好的问题,因为它应该没关系,但我的消费客户正在bar.
如果您需要 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; }
}
Run Code Online (Sandbox Code Playgroud)
这会给你:
<?xml version="1.0" encoding="utf-8"?>
<XMLFile xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<SalesOrders>
...
</SalesOrders>
</XMLFile>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2706 次 |
| 最近记录: |