反序列化期间出现异常

时间:2010-05-21 10:40:22

标签: c# .net serialization

运行以下代码时收到此消息:

  

XML文档中存在错误(6,22)。

namespace N1
{
    public class InputEntry
    {
        //FieldName is a class tht is generated from an XSD which has complex type Name and value
        private Field fields;
        public Field[] Fields
        {
            get { return this.fields; }
            set { this.fields= value; }
        }

        public string FieldName
        {
           get{return this.fieldName;}
           set { this.fieldName = value; }
        }

       public string FieldValue
       {
        get {return this.fieldValue; }
        set {this.fieldValue = value;}
       }
    }

    public class B
    {
        public void Method1()
        {
            InputEntry inputEntry = new InputEntry();
            //we some how get the values from user and assign them to
            Field f1 = new Field();
            f1.FieldName = "PRINTLINE00";
            f1.FieldValue = "DENIAL STATE" ;
        }

        private void Method2(InputEntry inputEntry)
        {
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(InputEntry));
            System.IO.StringWriter inputStr = new System.IO.StringWriter(CultureInfo.InvariantCulture);
            serializer.Serialize(inputStr, inputEntry);
            string ipEntry = inputStr.ToString();
            Method3(ipEntry);
        }

        private void Method3(string ipEntry)
        {
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(InputEntry));
            System.IO.StringReader inputStr = new System.IO.StringReader(ipEntry);
            InputEntry inputEntry = (InputEntry)serializer.Deserialize(inputStr);

        }
    }
}
     // when client configues input data as
     // <FieldName>PRINTLINE00</FieldName> <FieldValue>DENIAL STATE</FieldValue>,
     //I get an exception when the same data deserialised
     //Exception is:-

字符串:

<?xml version="1.0" encoding="utf-16"?>
<InputEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <Fields>
    <Field>
      <FieldName>PRINTLINE00</FieldName>
      <FieldValue>&#x1B;DENIAL STATE 217</FieldValue>
    </Field>
  </Fields>
</InputEntry>

4 个答案:

答案 0 :(得分:7)

除了你错过了一个结束字段标记这一事实之外,你还试图序列化Unicode字符U + 001B ......遗憾的是,XML不支持。

这是一个“逃脱”角色......你真的想要在字符串中开始吗?您可以在代码中添加验证(或修剪)。

答案 1 :(得分:2)

xml文档中缺少</Fields>标记。

答案 2 :(得分:1)

您需要关闭字符检查,如下所示:

serializer.Deserialize (XmlReader.Create (inputStr, new XmlReaderSettings
    { CheckCharacters = false, }))

答案 3 :(得分:0)

<FieldName>PRINTLINE00</FieldName> <FieldValue**>**DENIAL STATE</FieldValue>

缺少&lt;