क्रमबद्ध करें मेरे पास एक कक्षा है जिसे मैंने यूरियल संपत्ति के साथ Serializable के रूप में चिह्नित किया है। मैं यूरी को प्रकार स्ट्रिंग की संपत्ति के बिना धारावाहिक/deserialize करने के लिए कैसे प्राप्त कर सकते हैं?कैसे करें (xml) एक यूरी
उत्तर
how to serialize TimeSpan
के लिए उत्तर मैं इस जो मेरे लिए काफी अच्छी तरह से काम करता है और अतिरिक्त संपत्ति की आवश्यकता नहीं है के साथ समाप्त हो गया में से एक के आधार पर :
public class XmlUri : IXmlSerializable
{
private Uri _Value;
public XmlUri() { }
public XmlUri(Uri source) { _Value = source; }
public static implicit operator Uri(XmlUri o)
{
return o == null ? null : o._Value;
}
public static implicit operator XmlUri(Uri o)
{
return o == null ? null : new XmlUri(o);
}
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
_Value = new Uri(reader.ReadElementContentAsString());
}
public void WriteXml(XmlWriter writer)
{
writer.WriteValue(_Value.ToString());
}
}
तो आप इसे इस
public class Settings
{
public XmlUri Uri { get; set; }
}
...
var s = new Settings { Uri = new Uri("http://www.example.com") };
की तरह उपयोग कर सकते हैं और यह अच्छी तरह से क्रमानुसार और deserialize होगा।
नोट: उपरोक्त लिंक किए गए प्रश्न में XmlSerializer
रिक्त डिफ़ॉल्ट कन्स्ट्रक्टर के लिए चेक के रूप में XmlElement(Type = typeof(...))
विशेषता के साथ चाल का उपयोग नहीं कर सकता है।
Uri कक्षा ISerializable इंटरफ़ेस लागू करता है ताकि यह धारावाहिक/deserialization का ख्याल रखने में सक्षम होना चाहिए।
हम्म, शायद 3.5 चीज? मुझे अपवाद मिलता है कि जब मैं 2 में क्रमबद्ध करता हूं तो कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं होता है।0 – Jeremy
यह * बाइनरी * क्रमबद्धता के लिए है; प्रश्न (टैग देखें) लगभग * xml * serialization –
उरी पहले से ही क्रमबद्ध है, इसलिए मुझे विश्वास नहीं है कि आपको कुछ भी करना है।
http://msdn.microsoft.com/en-us/library/system.uri(VS.80).aspx
टैग्स xmlserializer का सुझाव देते हैं, ताकि (अकेला) अधिक नहीं करता –
कार्यान्वित करके IDeserializationCallback और अपने दम पर उस क्षेत्र का उपयोग करें।
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ideserializationcallback.aspx
टैग xmlserializer का सुझाव देते हैं - जो इन –
एक्सएमएल serializer के साथ, आप सीमित हैं - यह के रूप में (जैसे) BinaryFormatter/ISerializable
विकल्पों में से कुछ के रूप में बहुमुखी नहीं है। एक लगातार चाल क्रमबद्धता के लिए एक दूसरे की संपत्ति है:
[XmlIgnore]
public Uri Uri {get;set;}
[XmlAttribute("uri")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public string UriString {
get {return Uri == null ? null : Uri.ToString();}
set {Uri = value == null ? null : new Uri(value);}
}
दो ब्राउज़ करने योग्य गुण दिखने से छुपाने (लेकिन यह इसका इस्तेमाल करने के लिए XmlSerializer
सार्वजनिक एपीआई पर होने की जरूरत है)। XmlIgnore
यह बताता है कि Uri
का प्रयास न करें; और [XmlAttribute(...)]
(या [XmlElement(...)]
) इसे UriString
का नाम बदलने के लिए कहता है जब (डी) इसे क्रमबद्ध करता है।
(ध्यान दें कि EditorBrowsable
केवल विधानसभा प्रकार की घोषणा के बाहर कोड पर लागू होता है)
का समर्थन नहीं करता है नोट: यहां एक छोटा सा झटका है। क्रमबद्धता काम करेगी, लेकिन डी-क्रमबद्धता विफल हो जाएगी। –
@ श्रीवांत अट्टानायक मुझे लगता है कि उरी पर निर्भर करता है। – Aelphaeis
उन लोगों के लिए जिन्होंने इस प्रश्न को पाया और जिन्हें समाधान पसंद नहीं आया, वहां एक और अधिक लचीला और शक्तिशाली समाधान है। यह कार्यान्वयन IXmlSerializable इंटरफ़ेस है। यह और अधिक कठिन है, लेकिन यह इसके लायक है। आप जो भी एक्सएमएल चाहते हैं उसे बना सकते हैं। सबसे सरल उदाहरण है:
public class Product : IXmlSerializable
{
public string Code { get; set; }
public string Model { get; set; }
public string Name { get; set; }
public Uri ImageUri { get; set; }
public virtual System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotImplementedException();
}
public virtual void ReadXml(XmlReader reader)
{
reader.MoveToContent();
Code = reader.GetAttribute("Code");
Model = reader.GetAttribute("Model");
Name = reader.GetAttribute("Name");
if (reader.ReadToDescendant("Image") && reader.HasAttributes)
ImageUri = new Uri(reader.GetAttribute("Src"));
}
public virtual void WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("Code", Code);
writer.WriteAttributeString("Model", Model);
writer.WriteAttributeString("Name", Name);
if (ImageUri != null)
{
writer.WriteStartElement("Image");
writer.WriteAttributeString("Src", ImageUri.AbsoluteUri);
writer.WriteEndElement();
}
}
}
और आप XML में कुछ इस तरह मिलती है:
<PriceContainer Code="314" Model="PP500" Name="NuTone PurePower PP500 Power Unit">
<Image Src="http://www.thinkvacuums.com/images/nutone-pp500-activac.jpg" />
</PriceContainer>
टैग
- 1. यूरी
- 2. XML कैसे करें 'टाइप करें'
- 3. कस्टम यूरी
- 4. रूबी (और ओपन-यूरी)
- 5. पैक यूरी सत्यापन
- 6. कोको - कैसे एक XML फ़ाइल
- 7. ओपन-यूरी में एसएसएल प्रमाणपत्र सत्यापन को कैसे बाईपास करें?
- 8. XDocument.Load (स्ट्रिंग यूरी) पर टाइमआउट कैसे सेट करें?
- 9. कैसे मैं एक XML टैग
- 10. यूरी मैनिपुलेशन क्लास .net
- 11. ओपन-यूरी http
- 12. एक XML
- 13. सीएसएस कर्सर डेटा-यूरी
- 14. एक XML फ़ाइल
- 15. फ़ाइल यूरी को सामग्री uri
- 16. एक xhtml + xml पेज
- 17. यूरी क्या हैं, सामग्री वैल्यू
- 18. xslt - एक xml फ़ाइल
- 19. एक XML दस्तावेज
- 20. XML दस्तावेज़ फ़ाइलों का उपयोग कैसे करें
- 21. jquery - xml डेटा कैसे प्राप्त करें
- 22. एक XML दस्तावेज
- 23. एक XML नोड मूल्य
- 24. खाली छवि को डेटा-यूरी
- 25. xml
- 26. अनुरूप XML साइटमैप को कैसे सत्यापित करें?
- 27. करें Xml सी #
- 28. xml
- 29. xml
- 30. सी # कैसे मैं एक xml फ़ाइल
सुझाव है XmlSerializer; असल में, आपको इसके लिए [Serializable] की आवश्यकता नहीं है - इस प्रकार को सिर्फ सार्वजनिक होना चाहिए। –