【问题标题】:Deserialization error when attribute is bool属性为布尔时的反序列化错误
【发布时间】:2013-07-04 12:12:11
【问题描述】:

我正在尝试将 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>

反序列化工作的唯一方法是属性是“字符串”。 有什么办法可以用注解之类的吗?

这是反序列化代码:

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);
        }

【问题讨论】:

  • 贴出实际的(反)序列化代码。
  • @HenkHolterman 刚刚添加了代码。
  • 叹息。现在请提供序列化代码。他们必须匹配。 XmlSerializer 写入 true,而不是 True
  • 是的,真正的问题是。我没有创建 XML,我只是从客户的数据库中使用它。

标签: c# xml xml-deserialization


【解决方案1】:

当你想解析 XML 时,你应该使用 XSD Schema。

XSD Schema 描述了一个 XML 文件。

添加这个文件: 创建一个元素-> 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 Schema 的命名空间 - XSD Schema 的位置

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

【讨论】:

  • 你真的不需要这些。
  • @HenkHolterman 在处理自己的 XML 时使用 XSD Schema 是一个非常好的习惯。这是可行的安全措施。它检查 XML 并生成类。必须使用这个强大的工具。
  • 有时必须使用。愿意告诉我在使用 XmlSerializer 时 XSD 有哪些帮助?
猜你喜欢
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
相关资源
最近更新 更多