属性为bool时反序列化错误

时间:2013-07-04 12:12:11

标签: c# xml xml-deserialization

我正在尝试将xml反序列化为类,但它给了我一个例外。

我的班级是这样的:

public class FieldsVO
    {    
        public bool AllowPrint { get; set; }
        public bool AllowAbort { get; set; }
        public bool AllowPrintFSFSDA { get; set; }
    }

我的XML:

<fields>
    <AllowPrint>True</AllowPrint>
    <AllowAbort>True</AllowAbort>
    <AllowPrintFSFSDA>True</AllowPrintFSFSDA>
</fields>

反序列化的唯一方法是属性是“字符串”。 有没有办法用anotations做什么?

这是反序列化代码:

public static object Deserialize(string xml, Type objType)
        {
            if (false == xml.StartsWith("<"))
            {
                int pos = xml.IndexOf('<');
                xml = xml.Remove(0, pos);
            }
            XmlSerializer serializer = new XmlSerializer(objType);
            XmlReaderSettings set = new XmlReaderSettings();
            set.ValidationFlags = XmlSchemaValidationFlags.AllowXmlAttributes;
            using (XmlReader reader = XmlReader.Create(new StringReader(xml), set))
                return serializer.Deserialize(reader);
        }

1 个答案:

答案 0 :(得分:2)

如果要解析XML,则应使用XSD Schema。

XSD Schema描述了一个XML文件。

添加此文件: 创建一个元素 - &gt; XML Schema。 将此文件称为fields.xsd。

在您的情况下,它将是:

<xs:element name="fields">
<xs:complexType>
  <xs:sequence>
   <xs:element name="AllowPrint" type="xs:boolean"/>
   <xs:element name="AllowAbort" type="xs:boolean"/>
   <xs:element name="AllowPrintFSFSDA" type="xs:boolean"/>
  </xs:sequence>
</xs:complexType>
</xs:element>

然后,打开命令行界面。转到fields.xsd所在的目录。 输入:

xsd fields.xsd /classes

现在生成fields.cs。

在XML文件中,您必须添加:   - XSD架构的命名空间   - XSD架构的位置

      xmlns="urn:fields"
      xsi:schemaLocation="urn:fields fields.xsd">