我收到一个错误 无法将类型“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# 是一种强类型语言(并且没有从 object
到 LookUpCodeCollection
的隐式转换),编译器不知道如何将结果分配给 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/