मैं Xml achives deserialize करने के लिए XmlSerializer उपयोग कर रहा हूँ। लेकिन मुझे लगता है कि कक्षा xsd.exe उत्पन्न केवल एक्सएमएल पढ़ने की क्षमता प्रदान करता है, लेकिन कोई सत्यापन नहीं है। उदाहरण के लिए यदि एक नोड एक दस्तावेज में याद आ रही है, उत्पन्न वर्ग की विशेषता फ़ील्ड रिक्त हो जाएगा, के बजाय एक मान्यता अपवाद फेंकता है के रूप में मैं उम्मीद थी। मैं उसे कैसे प्राप्त कर सकता हूं? धन्यवाद!XmlSerializer सत्यापन
उत्तर
निम्नलिखित कोड एक स्कीमा के विरुद्ध सत्यापन चाहिए, जबकि deserializing। क्रमबद्ध करने के दौरान एक स्कीमा के खिलाफ सत्यापन करने के लिए इसी तरह के कोड का उपयोग किया जा सकता है।
private static Response DeserializeAndValidate(string tempFileName)
{
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(LoadSchema());
Exception firstException = null;
var settings = new XmlReaderSettings
{
Schemas = schemas,
ValidationType = ValidationType.Schema,
ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings
};
settings.ValidationEventHandler +=
delegate(object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
{
Console.WriteLine(args.Message);
}
else
{
if (firstException == null)
{
firstException = args.Exception;
}
Console.WriteLine(args.Exception.ToString());
}
};
Response result;
using (var input = new StreamReader(tempFileName))
{
using (XmlReader reader = XmlReader.Create(input, settings))
{
XmlSerializer ser = new XmlSerializer(typeof (Response));
result = (Response) ser.Deserialize(reader);
}
}
if (firstException != null)
{
throw firstException;
}
return result;
}
निम्नलिखित कोड मैन्युअल रूप से लोड और प्रोग्राम के रूप में एक स्कीमा फ़ाइल के खिलाफ अपने एक्सएमएल को मान्य, आप किसी भी resulting errors and/or warnings के साथ सौदा करने की इजाजत दी जाएगी।
//Read in the schema document
using (XmlReader schemaReader = XmlReader.Create("schema.xsd"))
{
XmlSchemaSet schemaSet = new XmlSchemaSet();
//add the schema to the schema set
schemaSet.Add(XmlSchema.Read(schemaReader,
new ValidationEventHandler(
delegate(Object sender, ValidationEventArgs e)
{
}
)));
//Load and validate against the programmatic schema set
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Schemas = schemaSet;
xmlDocument.Load("something.xml");
xmlDocument.Validate(new ValidationEventHandler(
delegate(Object sender, ValidationEventArgs e)
{
//Report or respond to the error/warning
}
));
}
अब स्पष्ट रूप से आप xsd.exe द्वारा उत्पन्न स्वचालित रूप से ऐसा करने के लिए कक्षाओं की इच्छा और लोड करते समय (ऊपर दृष्टिकोण एक्सएमएल फ़ाइल के एक दूसरे से निपटने की आवश्यकता होगी), लेकिन एक पूर्व लोड सत्यापित करें की अनुमति होगी आप प्रोग्रामेटिक रूप से एक विकृत इनपुट फ़ाइल का पता लगाने के लिए।
@ जॉन सॉन्डर्स - मुझे लगता है कि वर्ग पीढ़ी कोड इसके संचालन किसी भी समय जल्द ही बदलने की संभावना है पर शक कर रहा हूँ, और MSDN साइट xsd.exe के लिए कोई भी प्रासंगिक विकल्प दिखाता है, इसलिए मुझे लगता है कि यह एक सुझाव देने के लिए उचित है वर्कअराउंड ... – el2iot2
प्रश्न पाठ में, ओपी व्यक्त करता है कि वह एक अमान्य इनपुट xml के लिए एक अपवाद फेंकना चाहता है। यह दृष्टिकोण इसे पूरा करता है। मैं दावा नहीं कर रहा हूं कि यह एकमात्र तरीका है जिसे किया जा सकता है, या यहां तक कि यह सबसे अच्छा तरीका है। लेकिन मैं एक दृष्टिकोण है कि मैंने पहले भी इस्तेमाल किया था आम तौर पर एक्सएमएल दस्तावेजों को मान्य करने के (मेरे सिर के ऊपर से) के साथ जवाब दिया गया था। – el2iot2
- 1. XmlSerializer
- 2. XmlSerializer
- 3. XmlSerializer
- 4. XmlSerializer
- 5. XmlSerializer
- 6. XmlSerializer
- 7. XmlSerializer
- 8. XmlSerializer
- 9. XmlSerializer
- 10. एंड्रॉइड XmlSerializer
- 11. मैं XMLSerializer
- 12. .net XmlSerializer
- 13. XmlSerializer निर्माता
- 14. XMLSerializer XElement
- 15. XmlSerializer IENumerable
- 16. XmlSerializer sgen
- 17. XmlSerializer प्रॉपर्टी कनवर्टर
- 18. सी # XmlSerializer BindingFailure
- 19. XmlSerializer और एम्बेडेड व्हाइटस्पेस
- 20. .NET के XmlSerializer
- 21. क्या XmlSerializer और BinaryFormatter
- 22. XmlSerializer। एक्सएमएल अज्ञात नोड
- 23. XmlSerializer UTF-8 एन्कोडिंग
- 24. XmlSerializer और nullable विशेषताएँ
- 25. XmlSerializer, "विनिर्दिष्ट" प्रत्यय और IReflect
- 26. System.InvalidOperationException: XmlSerializer विशेषता System.Xml.Serialization.XmlChoiceIdentifierAttribute आइटम
- 27. XmlSerializer प्रदर्शन जारी जब XmlRootAttribute
- 28. XmlSerializer। शून्य स्ट्रिंग गुण रखें?
- 29. XmlSerializer सूची आइटम तत्व नाम
- 30. () XmlSerializer के साथ यह serializing
इस समाधान को साझा करने के लिए धन्यवाद। इस deserialize साथ में लाइन सत्यापन का कहना है XmlReader के माध्यम से मान्य द्वारा, यह एक बेहतर तरीका है। – el2iot2