【问题标题】:XML Deserializer - object is emptyXML 反序列化器 - 对象为空
【发布时间】:2011-10-27 16:08:10
【问题描述】:

我想将对象转换为 xml 并反转。我可以使用这种方法将我的对象毫无问题地序列化为 xml 文档:

public static void SaveObjectToXML(T _obj, string fileName)
{
   XmlSerializer ser = new XmlSerializer(typeof(T));
   FileStream str = new FileStream(fileName, FileMode.Create);
   ser.Serialize(str, _obj);
   str.Close();
}

但是使用反序列化器时我遇到了一些问题......虽然这个过程我没有遇到错误或问题(调用它的方法也是如此)但是当我尝试访问任何成员时问题就开始了。所有成员都是空的(对于访问任何成员的方法都是一样的)。代码如下:

public static T SaveXMLToObject(string fileName)
{
   XmlSerializer ser = new XmlSerializer(typeof(T));
   StreamReader sr = new StreamReader(fileName);
   T dataSet = (T)ser.Deserialize(sr);
   return dataSet;
}

有什么想法吗?


编辑:

好的,我刚刚添加了 using 语句,谢谢 :) 完整的类有点多,但它们看起来像这样:

public class User
{
   private string _name;
   public string Name
   {
     get { return _name; }
     set { }
   }
}

public class AllUser
{
   private User[] _users;
   public User[] Users
   {
      get { return _users; }
      set { }
   }
}

【问题讨论】:

  • 除了不使用using,我真的看不出这段代码有什么问题。你能在这里发布T 的定义吗?
  • 好的,我刚刚添加了 using 语句,谢谢 :) 完整的类有点多,但它们看起来像这样: public class User { private string _name;公共字符串名称 { 获取 { 返回 _name; } 设置 { } } } 公共类 AllUser { 私人用户 [] _users;公共用户 [] 用户 { 获取 { 返回 _users; } 设置 { } } }
  • sry,但我只能发表评论:/ 发现你可以编辑我的帖子 :)
  • 一旦我填写了你的设置器,这对我来说很好用。我可以发布我的完整示例,但我猜问题是别的。
  • 该死的,我需要睡觉 :)。我将值分配给用于内部计算的私有成员,它们的名称几乎相同:/需要更改它。修复了二传手,一切正常。谢谢

标签: c# xml serialization xml-serialization


【解决方案1】:

假设示例代码是完整的,我一点也不感到惊讶。你有空的设置器(这是序列化将使用的)。不要仅仅通过添加空设置器来满足序列化错误。它是填充数据所必需的。

改为

set { _users = value; }

它应该可以工作

【讨论】:

  • 我认为他只是在精简他的例子
  • 该死的,我需要睡觉 :)。我将值分配给用于内部计算的私有成员,它们的名称几乎相同:/需要更改它。修复了二传手,一切正常。谢谢
【解决方案2】:

我认为您只需将要反序列化的类标记为[Serializable]。例如:

[Serializable]
public class User
{
    ...
}

【讨论】:

  • 我很确定 XmlSerializer 不关心 SerializableAttribute
  • @Kipaboy:也许这些错误可以帮助我们。 @liho1eye:你说得对,SerializableAttribute 不是必需的(尽管 XML 序列化和反序列化的大多数示例都显示它正在使用),但使用它是一种很好的做法,如果只是为了表明存在某种类型的这些类发生序列化。我认为它可以解决任何问题是错误的。
  • @Cory 我在上面发布了我的错误 1 ​​个帖子。我将值分配给了错误的私有成员...我无法重现我在使用 SerializableAttribute 时遇到的错误,但我在大约 1 周前遇到了这些错误并且正在处理其他脚本!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多