2016-11-01 4 views
5

からのxmlns私は、HTTPエンドポイントから次のXML文書を提供するように求めてきた、まさに好き: -のxmlnsを削除:iとWEBAPI

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

Iを吐き出しますGoogleは周りの様々な修正を試してみましたが、無駄に、私のモデルは

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

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

など私の設定loolsのように見えます私はxmlns:ixmlnsを削除し、xmlns:xsdxmlns:xsiと交換するにはどうすればよいこの

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

    } 

これは問題ではありませんが、私の消費するクライアントはバービングしているので、これは悪い質問です。

+0

http://stackoverflow.com/questions/12590801/remove-namespace-in-xml-from-asp-net-web-apiの可能性の重複を? –

+0

いいえ、それを試してみました – Rippo

答えて

2

XMLがまったく同じように表示される必要がある場合は、XmlSerializerを使用する方がよい場合があります。 DataContractSerializerは、両方の側でそれを使用すると見なされるのと同じレベルの制御を与えません。

これは、2つのインスタンスが意味的に異なるため、あなたの消費しているクライアントが「バービング」していると思います。最初の名前空間は空の既定の名前空間を持ち、2番目の既定の名前空間は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> 
+0

ありがとう、私はXMLFileクラスでこれを試しましたが、すべての基本クラスの名前空間にNamesspaceを追加しませんでした。クライアントに再試行を依頼します。ありがとう – Rippo

+0

ああ、消費クライアントはまだbarfingです。愚かな古いXMLシステムは、XMLSerializerパスを下る必要があるようです。 – Rippo

+0

代わりにXMLSerializerがダウンしました。愚かなことは、コンテンツタイプのネゴシエーションのために今後webapiを使用できないことを意味します。ありがとう – Rippo

関連する問題