using System.IO;
using System.Xml.Serialization;
-class Test
+
+class Program
{
- static public T DeserializeFromString<T>(string xml) where T : class
+ static public T DeserializeFromString<T>(string xml) where T : class
+ {
+
+ if (String.IsNullOrEmpty(xml))
{
+ return null;
+ }
- if (String.IsNullOrEmpty(xml))
+ StringReader reader = null;
+ T deserializedObject = null;
+ try
+ {
+ reader = new StringReader(xml);
+ XmlSerializer serializer = new XmlSerializer(typeof(T));
+ deserializedObject = serializer.Deserialize(reader) as T;
+ }
+ finally
+ {
+ if (null != reader)
{
- return null;
+ reader.Close();
}
+ }
+ return deserializedObject;
+ }
- StringReader reader = null;
- T deserializedObject = null;
- try
- {
- reader = new StringReader(xml);
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- deserializedObject = serializer.Deserialize(reader) as T;
- }
- finally
- {
- if (null != reader)
- {
- reader.Close();
- }
- }
- return deserializedObject;
+
+ static void Main(string[] args)
+ {
+ string myXML = @"<?xml version=""1.0"" encoding=""utf-8""?><TASK><OptionA/></TASK>";
+
+ // The following line fails on Mono 2.8 2.10 2.10.8.1 2.10.9
+ TASK data = DeserializeFromString<TASK>(myXML);
+ if(data == null)
+ {
+ throw new Exception("A#01");
}
+ if(data.ItemElementName != ItemChoiceType.OptionA)
+ {
+ throw new Exception("A#02");
+ }
+ }
+}
+
+// Below is the code generated from the following XSD:
+/*
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="TASK">
+ <xs:complexType>
+ <xs:choice>
+ <xs:element name="OptionA"/>
+ <xs:element name="OptionB"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
+*/
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.239
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+//
+// This source code was auto-generated by xsd, Version=4.0.30319.1.
+//
+
+
+/// <remarks/>
+[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
+[System.SerializableAttribute()]
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.ComponentModel.DesignerCategoryAttribute("code")]
+[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
+[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
+public partial class TASK {
+
+ private object itemField;
+
+ private ItemChoiceType itemElementNameField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("OptionA", typeof(object), Order=0)]
+ [System.Xml.Serialization.XmlElementAttribute("OptionB", typeof(object), Order=0)]
+ [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
+ public object Item {
+ get {
+ return this.itemField;
+ }
+ set {
+ this.itemField = value;
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Order=1)]
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ public ItemChoiceType ItemElementName {
+ get {
+ return this.itemElementNameField;
+ }
+ set {
+ this.itemElementNameField = value;
+ }
+ }
+}
- static void Main ()
- {
- string myXML = @"<?xml version=""1.0"" encoding=""utf-8""?><TASK><OptionA/></TASK>";
- TASK data = DeserializeFromString<TASK>(myXML);
- System.Console.WriteLine(data);
- }
+/// <remarks/>
+[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
+[System.SerializableAttribute()]
+[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]
+public enum ItemChoiceType {
+
+ /// <remarks/>
+ OptionA,
+
+ /// <remarks/>
+ OptionB,
}
+++ /dev/null
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.239
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-using System.Xml.Serialization;
-
-//
-// This source code was auto-generated by xsd, Version=4.0.30319.1.
-//
-
-
-/// <remarks/>
-[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
-[System.SerializableAttribute()]
-[System.Diagnostics.DebuggerStepThroughAttribute()]
-[System.ComponentModel.DesignerCategoryAttribute("code")]
-[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
-[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
-public partial class TASK {
-
- private object itemField;
-
- private ItemChoiceType itemElementNameField;
-
- /// <remarks/>
- [System.Xml.Serialization.XmlElementAttribute("OptionA", typeof(object), Order=0)]
- [System.Xml.Serialization.XmlElementAttribute("OptionB", typeof(object), Order=0)]
- [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
- public object Item {
- get {
- return this.itemField;
- }
- set {
- this.itemField = value;
- }
- }
-
- /// <remarks/>
- [System.Xml.Serialization.XmlElementAttribute(Order=1)]
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- public ItemChoiceType ItemElementName {
- get {
- return this.itemElementNameField;
- }
- set {
- this.itemElementNameField = value;
- }
- }
-}
-
-/// <remarks/>
-[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
-[System.SerializableAttribute()]
-[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]
-public enum ItemChoiceType {
-
- /// <remarks/>
- OptionA,
-
- /// <remarks/>
- OptionB,
-}
-