2011-06-10 18 views
6

के बीच भिन्न है मेरे पास एक लाइब्रेरी है जो CF.NET & .NET के अंतर्गत हो जाती है लेकिन क्रमिकरण दोनों के बीच भिन्न होता है। नतीजतन, सीएफ.NET के तहत उत्पन्न एक एक्सएमएल फ़ाइल .NET के तहत पठनीय नहीं है, और यह मेरे लिए एक बड़ी समस्या है!XmlSerializer .NET 3.5 और CF.NET 3.5

यहाँ कोड नमूना:

[Serializable, XmlRoot("config")] 
public sealed class RemoteHost : IEquatable<RemoteHost> 
{ 
    // ... 
} 

public class Program 
{ 
    public static void Main() 
    { 
     RemoteHost host = new RemoteHost("A"); 
     List<RemoteHost> hosts = new List<RemoteHost>(); 
     hosts.Add(host); 
     XmlSerializer ser = new XmlSerializer(typeof(List<RemoteHost>)); 
     ser.Serialize(Console.Out, hosts); 
    } 
} 

CF.NET xml:

<?xml version="1.0"?> 
<ArrayOfConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <config Name="A"> 
    </config> 
</ArrayOfConfig> 

नेट एक्सएमएल

<?xml version="1.0" encoding="ibm850"?> 
<ArrayOfRemoteHost xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <RemoteHost Name="A"> 
    </RemoteHost> 
</ArrayOfRemoteHost> 

मैं आदेश में एक ही उत्पन्न करने के लिए मेरा कार्यक्रम कैसे संशोधित कर सकते हैं एक्सएमएल?

उत्तर

4

यह वास्तव में रूट नाम को प्रसंस्करण करने वाली बग की तरह दिखता है। समाधान के लिए: मैन्युअल रूप से जड़ का नियंत्रण लेने:

[XmlRoot("foo")] 
public class MyRoot { 
    [XmlElement("bar")] 
    public List<RemoteHost> Hosts {get;set;} 
} 

यह या तो मंच पर

रूप
<foo><bar>...</bar>...</foo> 

को क्रमानुसार चाहिए। अपने पसंदीदा नामों के लिए foo और bar का स्थान बदलें।

(व्यक्तिगत रूप से, मैं द्विआधारी उत्पादन, हालांकि का उपयोग किया था, पी)

+0

Arghhhhhh ... इस तरह से मैं अपने सभी व्यापार मॉडल ... द्विआधारी उत्पादन पुनर्गठन करने की जरूरत है ऐसा? –

+0

@ अर्नुड - सीरियलाइजेशन के बिंदु पर सिर्फ एक रैपर जोड़ना वास्तव में पूरे मॉडल को बदल नहीं रहा है। –

+0

यदि मैं उन्हें क्रमबद्ध करना चाहता हूं तो मुझे सभी रिमोटहोस्ट को MyRoot में जोड़ना होगा, देखेंगे ... –