सबसे पहले, नामस्थान उपनाम की पसंद को अच्छी तरह से गठित पार्सर में कोई फर्क नहीं पड़ता।
लेकिन; क्या यह DataContractSerializer
होना चाहिए? XmlSerializer
के साथ, आप Serialize
के अधिभार का उपयोग कर सकते हैं जो XmlSerializerNamespaces
स्वीकार करता है। यह आपको उन नामस्थानों और उपनामों को चुनने और चुनने की अनुमति देता है जिनका आप उपयोग करते हैं।
अंततः; DataContractSerializer
पूर्ण xml नियंत्रण देने के उद्देश्य से है; यह उसका लक्ष्य नहीं है। यदि आप सख्त एक्सएमएल नियंत्रण चाहते हैं, XmlSerializer
एक बेहतर विकल्प है, भले ही यह पुराना हो (और इसमें कुछ बारीकियों/फॉबल्स हैं)।
पूर्ण उदाहरण:
using System;
using System.Xml.Serialization;
public class Amount
{
public const string CoreNamespace = "http://core.test.com/";
[XmlElement("Amount", Namespace=CoreNamespace)]
public decimal Value { get; set; }
[XmlElement("CurrencyCode", Namespace = CoreNamespace)]
public string Currency { get; set; }
}
[XmlType("SecurityHolding", Namespace = SecurityHolding.TradingNamespace)]
public class SecurityHolding
{
public const string TradingNamespace = "http://personaltrading.test.com/";
[XmlElement("Amount", Namespace = Amount.CoreNamespace)]
public Amount Amount { get; set; }
public int BrokerageId { get; set; }
public string BrokerageName { get; set; }
public int RecordId { get; set; }
}
static class Program
{
static void Main()
{
var data = new[] {
new SecurityHolding {
Amount = new Amount {
Value = 1.05M,
Currency = "USD"
},
BrokerageId = 0,
BrokerageName = null,
RecordId = 3681
}
};
var ser = new XmlSerializer(data.GetType(),
new XmlRootAttribute("ArrayOfSecurityHolding") { Namespace = SecurityHolding.TradingNamespace});
var ns = new XmlSerializerNamespaces();
ns.Add("foo", Amount.CoreNamespace);
ser.Serialize(Console.Out, data, ns);
}
}
आउटपुट:
<ArrayOfSecurityHolding xmlns:foo="http://core.test.com/" xmlns="http://personaltrading.test.com/">
<SecurityHolding>
<foo:Amount>
<foo:Amount>1.05</foo:Amount>
<foo:CurrencyCode>USD</foo:CurrencyCode>
</foo:Amount>
<BrokerageId>0</BrokerageId>
<RecordId>3681</RecordId>
</SecurityHolding>
</ArrayOfSecurityHolding>
स्रोत
2009-11-16 20:24:33