当前位置:编程学习 > C#/ASP.NET >>

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

小弟目前写一游戏的编辑器,生成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里没有任何内容就不会出错,不然在第一个物体单位那里就会读出...哎~ 希望有人能帮忙提示下小弟到底哪里错了 --------------------编程问答-------------------- WatchedList 类缺少一个构造函数 --------------------编程问答-------------------- GameObject也少了构造函数
另外public WatchedList<Monster> Monsters= new WatchedList<Monster>();
初始化一下会比较好
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,