C#中 XML反序列化失败的问题

超然同学 2010-05-21 04:32:22
小弟目前写一游戏的编辑器,生成XML文件。然后游戏主程序读XML,游戏是用JAVA写的在手机上跑,没出问题。目前就编辑器有问题,实在搞不懂了。

编辑器生成的序列化内容如下:



[Serializable]
public class GameObject
{

/// <summary>
/// 所有怪物
/// </summary>
public WatchedList<Monster> Monsters;
/// <summary>
/// 所有资源
/// </summary>
public WatchedList<Resources> Resources;
/// <summary>
/// 所有动画
/// </summary>
public WatchedList<Animation> Animations;
/// <summary>
/// 所有武器
/// </summary>
public WatchedList<Weapon> Weapons;
/// <summary>
/// 所有子弹
/// </summary>
public WatchedList<Bullet> Bullets;
}



WatchedList是一个继承于List的类,多了几个简单的功能而已


[Serializable]
public class WatchedList<T> : List<T>
{
public void Add(T item)
{
base.Add(item);
ObjectEvent(this, new ObjectEventArgs<T>(item, ObjectEventType.Add));
}

public bool Remove(T item)
{
if (base.Remove(item))
{
ObjectEvent(this, new ObjectEventArgs<T>(item, ObjectEventType.Del));
return true;
}
return false;
}
public event ObjectEventHandler<T> ObjectEvent;

public WatchedList(IEnumerable<T> collection)
: base(collection)
{
}
public WatchedList()
: base()
{
}
public WatchedList(int capacity)
: base(capacity)
{
}
}



每个具体的Bullet等内容大致如下:



[Serializable]
public class Bullet:ICloneable
{
[DescriptionAttribute("类型ID")
, CategoryAttribute("基本信息")]
public int TypeID { get; set; }

[DescriptionAttribute("武器名称")
, CategoryAttribute("基本信息")]
public String Name { get; set; }
}


但现在出现个问题,能成功的序列化到磁盘中,但读不出来(读写都是同一个编辑器)
比如序列化好的下列XML


<?xml version="1.0"?>
<GameObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Monsters>
<Monster>
<TypeID>1</TypeID>
<Name>新建怪物种类</Name>
<MonsProp>
<Level>0</Level>
<Life>0</Life>
<Def>0</Def>
<Atk>0</Atk>
<Agi>0</Agi>
<Weight>0</Weight>
<WalkSpeed>0</WalkSpeed>
<FlySpeed>0</FlySpeed>
</MonsProp>
<Items>
<WeaponID>0</WeaponID>
<FlightVehicleID>0</FlightVehicleID>
</Items>
</Monster>
</Monsters>
<Resources>
<Resources>
<ResID>1</ResID>
<Name>新建资源</Name>
</Resources>
</Resources>
<Animations>
<Animation>
<AniID>1</AniID>
<Name>新建动画</Name>
<NumX>0</NumX>
<NumY>0</NumY>
<NumFrame>0</NumFrame>
<PicWidth>0</PicWidth>
<PicHeight>0</PicHeight>
<PicX>0</PicX>
<PicY>0</PicY>
</Animation>
</Animations>
<Weapons>
<Weapon>
<TypeID>1</TypeID>
<Name>新建武器类型</Name>
<IcoName>BulletIco</IcoName>
<Bullets>
<TheBullet>
<BulletTypeID>1</BulletTypeID>
<Speed>
<X>300</X>
<Y>0</Y>
</Speed>
<Offset>
<X>0</X>
<Y>0</Y>
</Offset>
</TheBullet>
</Bullets>
<AutoCast>false</AutoCast>
<BulletAmount>-1</BulletAmount>
</Weapon>
</Weapons>
<Bullets />
</GameObject>


每次读取都提示如下错误:XML文档(22,5)中有错误。

就不懂了这有啥错误啊,同一个数据结构序列化都没问题,咋反序列化就出问题呢?
是不是这个WatchList写得有问题啊,怎么改才好呢?

我测试了下 只要某个List里没有任何内容就不会出错,不然在第一个物体单位那里就会读出...哎~ 希望有人能帮忙提示下小弟到底哪里错了
...全文
249 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
云瑀 2011-07-12
  • 打赏
  • 举报
回复
GameObject也少了构造函数
另外public WatchedList<Monster> Monsters= new WatchedList<Monster>();
初始化一下会比较好
皖西木子 2011-07-12
  • 打赏
  • 举报
回复
WatchedList 类缺少一个构造函数

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧