में वैल्यू प्रॉपर्टी का उपयोग करके एक्सएमएल से डीमेर से डीरियललाइज एनम, मैं सी # में पुस्तक आयात उपकरण के लिए एक ONIX लिखने की कोशिश कर रहा हूं। मैंने Xsd2Code का उपयोग करके कक्षाएं बनाकर शुरू किया और सभी गुणों के साथ एक विशाल फ़ाइल प्राप्त की जो कुछ tweaks deserializing पर कोई त्रुटि उत्पन्न नहीं करता है।सी #
मैं एक पूरे तत्व को स्मृति में एक बड़ी वस्तु में deserialize करने की कोशिश कर रहा हूँ और फिर इसके साथ सामान (जैसे इसे डेटाबेस में सहेजें)।
Xsd2Code वर्गों को उत्पन्न करने के तरीके के अलावा, इस तथ्य के अलावा कि बहुत सारे गुण हैं, कम से कम मेरे लिए थोड़ा अजीब हैं।
यहाँ वर्ग है जो उत्पाद वस्तु की संपत्ति होना चाहिए में से एक है:
public partial class NotificationType
{
public NotificationTypeRefname refname { get; set; }
public NotificationTypeShortname shortname { get; set; }
public SourceTypeCode sourcetype { get; set; }
public List1 Value { get; set; }
}
मैं इस लाइन पर अपना ध्यान केंद्रित करना चाहते हैं:
public List1 Value { get; set; }
"List1" एक enum है , इस प्रकार परिभाषित किया गया:
public enum List1
{
[System.Xml.Serialization.XmlEnum("01")]
Item01,
[System.Xml.Serialization.XmlEnum("02")]
Item02, etc...
मेरी समस्या यह है कि deserialization के दौरान, सभी क्षेत्रों को सही करने के लिए deserialize वाई Enums से बाहर।
मैंने XmlEnum ("अधिसूचना टाइप") आदि के साथ गुणों को सजाने की कोशिश की ... कुछ भी नहीं!
यह मेरा अक्रमांकन कोड है:
var p = new Product();
XmlSerializer pserializer = new XmlSerializer(p.GetType());
object pDeserialized = pserializer.Deserialize(reader);
p = (Product) pDeserialized;
इस तरह इस तत्व एक्सएमएल में दिखाई देता है:
<NotificationType>03</NotificationType>
संपत्ति उत्पाद वस्तु के लिए सी # में है:
public NotificationType NotificationType { get; set; }
यदि मैं इसे बदलता हूं:
public List1 NotificationType { get; set; }
deserialization सही ढंग से 'Item03' दिखाता है, जिसका अर्थ यह है कि यह XML में जो भी है उसे पढ़ता है। अगर मैं इसे ऊपर की तरह छोड़ देता हूं, अधिसूचना प्रकार की 'मूल्य' संपत्ति कभी भर नहीं जाती है, और हमेशा आइटम 01 (एनम का डिफ़ॉल्ट) दिखाती है।
मैंने एसओ और वेब खोजों पर सभी संभावित प्रश्नों को समाप्त कर दिया है, क्योंकि यह वैल्यू प्रॉपर्टी कुछ प्रकार (स्ट्रिंग्स) के साथ काम करती है लेकिन एनम्स नहीं। क्या मैं कुछ भूल रहा हूँ?
लंबे प्रश्न और कोड के लिए खेद है। इस मुद्दे पर किसी भी प्रकाश को छोड़कर किसी भी प्रकाश की सराहना करें। पूरे दिन के लिए इसके साथ अटक गया।
यह काम करता है! मैं कसम खाता हूँ कि मैंने पहले कोशिश की है। मुझे लगता है कि यह वह विशेषता है जो deserialization लाइब्रेरी को पता है कि XML तत्व के मान के रूप में कौन सी संपत्ति भरनी है। –
मेरे लिए काम नहीं करता है। –
पागल, मैं भी ONIX पर काम कर रहा हूँ! एक ही चीज एक सिंगल एनम वैल्यू के लिए भी मेरे लिए बहुत अच्छा काम करती है। Enums की एक सरणी desessizing के साथ कोई भाग्य? जैसे सूची 9 1 []? –