c# - 对象反序列化 XML 类型转换错误

标签 c# .net xml serialization xml-deserialization

我收到一个错误 无法将类型“object”隐式转换为“LookUpCodeCollection”。存在显式转换(您是否缺少强制转换?) 当我调用下面这行代码的方法时

 obj = Deserialize(xml.ToString(), typeof(LookUpCodeCollection));

这是 LookUpCode 对象

    [System.Serializable()]
    public class LookUpCode
    {

        #region "Member Variables"


        private int mCodeID;
        private int? mCategoryID;

        private string mLookUpDescription;
        #endregion

        #region "Properties"
        public int CodeID
        {
            get { return mCodeID; }
            set { mCodeID = value; }
        }

        public int? CategoryID
        {
            get { return mCategoryID; }
            set { mCategoryID = value; }
        }
        public string LookUpDescription
        {
            get { return mLookUpDescription; }
            set { mLookUpDescription = value; }
        }
        #endregion

    }
}

LookUpCodeCollection

using System;
using System.Collections.Generic;
[System.Serializable()]
public class LookUpCodeCollection : System.Collections.ObjectModel.Collection<LookUpCode>, IList<LookUpCode>
{
}

XML

- <ArrayOfLookUpCode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <LookUpCode>
  <CodeID>1</CodeID> 
  <CategoryID>1</CategoryID> 
  <LookUpDescription>States</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>2</CodeID> 
  <CategoryID>2</CategoryID> 
  <LookUpDescription>Connecticut Cities by Zipcode</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>3</CodeID> 
  <CategoryID>3</CategoryID> 
  <LookUpDescription>Zipcode Connecticut Cities</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>4</CodeID> 
  <CategoryID>4</CategoryID> 
  <LookUpDescription>ContactType</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>5</CodeID> 
  <CategoryID>5</CategoryID> 
  <LookUpDescription>PhoneType</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>6</CodeID> 
  <CategoryID>6</CategoryID> 
  <LookUpDescription>DocumentGenerationType</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>7</CodeID> 
  <CategoryID>7</CategoryID> 
  <LookUpDescription>AmendmentType</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>8</CodeID> 
  <CategoryID>8</CategoryID> 
  <LookUpDescription>ContractorsTown_TownCodes</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>9</CodeID> 
  <CategoryID>9</CategoryID> 
  <LookUpDescription>Status</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>10</CodeID> 
  <CategoryID>10</CategoryID> 
  <LookUpDescription>Upload Document Types</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>11</CodeID> 
  <CategoryID>11</CategoryID> 
  <LookUpDescription>ExpirationWarning</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>12</CodeID> 
  <CategoryID>12</CategoryID> 
  <LookUpDescription>RenewalInterval</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>13</CodeID> 
  <CategoryID>13</CategoryID> 
  <LookUpDescription>Reports</LookUpDescription> 
  </LookUpCode>
- <LookUpCode>
  <CodeID>14</CodeID> 
  <CategoryID>14</CategoryID> 
  <LookUpDescription>ActiveInactive</LookUpDescription> 
  </LookUpCode>
  </ArrayOfLookUpCode>

调用反序列化方法

        //Declare the variables
        LookUpCodeCollection obj = new LookUpCodeCollection();

obj = Deserialize(xml.ToString(), typeof(LookUpCodeCollection));

反序列化方法

        private static object Deserialize(string input, Type toType)
    {
        System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(toType);

        using (StringReader sr = new StringReader(input))
            return ser.Deserialize(sr);
    }

最佳答案

Deserialize() 返回一个对象。它将具有适当的类型,但由于 C# 是一种强类型语言(并且没有从 objectLookUpCodeCollection 的隐式转换),编译器不知道如何将结果分配给 LookUpCodeCollection 类型的变量。正如错误所提示的那样,您需要显式转换它:

LookUpCodeCollection obj = (LookUpCodeCollection)Deserialize(xml.ToString(), typeof(LookUpCodeCollection));

或者,您可以使您的 Deserialize 方法变得通用:

private static T Deserialize<T>(string input)
{
    System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));

    using (StringReader sr = new StringReader(input))
        return (T)ser.Deserialize(sr);
}

关于c# - 对象反序列化 XML 类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209467/

相关文章:

.net - WCF服务在 Debug模式下运行,但不在 Release模式下运行

.net - 在 Mono 上运行 VB.NET

xml - 合并2个XML文件并修改属性值

c# - 使用 SQLite 进行可靠的插入

c# - UI图像长度与图片长度

c# - 序列化 TypeBuilder 列表

xml - 向嵌套元素添加命名空间

c# - X264 捕获视频时出现错误消息

.net - 忽略 Perforce 文件夹差异中的文件夹

python - 更改 Odoo 中自动生成的表单 View 的标题