2016-11-01 8 views
5

से xmlns मैं एक http endpoint से निम्नलिखित XML दस्तावेज उपलब्ध कराने के लिए कहा गया है, वास्तव में चाहते: -xmlns निकालें: मैं और 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> 

हालांकि वेब एपीआई बाहर थूक

<?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:ixmlns को हटाने और और xmlns:xsd और xmlns:xsi साथ बदलूं?

मुझे पता है इससे कोई फर्क नहीं करना चाहिए, लेकिन मेरे लेने वाली ग्राहक barfing है कि यह एक बुरा सवाल है।

+0

http://stackoverflow.com/questions/12590801/remove-namespace-in-xml-from-asp-net-web-api की संभावित डुप्लिकेट ? –

+0

कोई देखा नहीं और कोशिश की, इच्छा है कि यह – Rippo

उत्तर

2

कि वास्तव में आप कुछ तरह देखने के लिए अपनी 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> 
+0

धन्यवाद, मैंने इसे XMLFile क्लास पर आजमाया है, लेकिन सभी अंतर्निहित वर्ग नामस्थानों में नामसेस्पेस नहीं जोड़ा है। क्लाइंट से फिर से प्रयास करने के लिए कहेंगे। धन्यवाद – Rippo

+0

खपत उपभोक्ता अभी भी बर्फ़ कर रहा है। बेवकूफ पुरातन एक्सएमएल सिस्टम, ऐसा लगता है कि मुझे XMLSerializer पथ – Rippo

+0

नीचे जाने की आवश्यकता है, इसके बजाय XMLSerializer नीचे चला गया, बेवकूफ माध्यम मैं सामग्री प्रकार बातचीत के लिए भविष्य में सबूत के लिए अब वेबपी का उपयोग नहीं कर सकता। धन्यवाद – Rippo