错误:'对象'不包含' lp'的定义没有扩展方法>' lp'接受类型'对象'的第一个参数。可以找到(你是否缺少>使用指令或汇编参考?
如果我尝试从我的对象中获取值,我会得到这个......
但是当我在没有尝试获取值的情况下运行时,我可以清楚地看到我的对象确实包含lp ...
反序列化的完整代码......
public object Deserialize(Object obj, string path)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
StreamReader reader = new StreamReader(path);
obj = serializer.Deserialize(reader);
reader.Close();
return obj;
}
人类......
public class Person
{
public string name { get; set; }
public int age { get; set; }
}
PersonList类......
public class PersonList
{
public List<Person> lp = new List<Person>();
public void AddPerson(Person p)
{
lp.Add(p);
}
}
它是我发送到公共类PersonList
的人员列表的一个实例{
public List<Person> lp = new List<Person>();
public void AddPerson(Person p)
{
lp.Add(p);
}
}.
更新:之前我正在进行投射,但是我将传递大量不同类型的对象,因此需要一个通用的反序列化函数。有没有办法做到这一点? -
答案 0 :(得分:1)
您的obj变量被声明为对象实例。在Deserialize中进行强制转换:
var obj = (PersonList)serializer.Deserialize(reader);
答案 1 :(得分:1)
您的obj具有对象的类型,因此您只能使用 object 类的常规方法。你应该把obj强制转换为你需要的类型。例如:
obj = (PersonList)serializer.Deserialize(reader);
obj = serializer.Deserialize(reader) as PersonLis;
您还可以使用是运算符来检查 obj 是否属于 PersonList 类
答案 2 :(得分:1)
您通过请求进行通用演员表来更新您的问题,而Generics正是您正在寻找的。 p>
public T Deserialize<T>(T obj, string path)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
StreamReader reader = new StreamReader(path);
obj = (T)serializer.Deserialize(reader);
reader.Close();
return obj;
}
答案 3 :(得分:1)
您可以为XmlSerializer编写扩展方法以使用通用反序列化:
public static class Extension
{
public static T Deserialize<T>(this XmlSerializer serializer, StreamReader streamReader)
{
try
{
return (T) serializer.Deserialize(streamReader);
}
catch (InvalidCastException)
{
return default(T);
}
}
}
然后通过以下方式调用它:
XmlSerializer serializer = new XmlSerializer(obj.GetType());
StreamReader reader = new StreamReader(path);
var deserialized = serializer.Deserialize<PersonList>(reader);
reader.Close();