C# XmlSerializer类 中非常奇怪的问题?求解释?高手速度进来!

寻找爱玩Tom 发布于 2012/06/26 15:36
阅读 1K+
收藏 0
C#

首先我们来看看MSDN中的解释:http://msdn.microsoft.com/zh-cn/library/swxzdhc0(v=vs.100)

上面提到了无法序列化List<T>的数组,也即使无法实现继承IList的接口的类的序列化!
可是为什么我的代码不报错?

 public class ExtraProperty
    {

        #region 属性
        /// <summary>
        /// 属性的唯一标识
        /// </summary>
        public string PropertyGuid
        {
            get;
            set;
        }
        /// <summary>
        /// 属性的名称(将在UI上显示)
        /// </summary>
        public string PropertyName
        {
            get;
            set;
        }
        /// <summary>
        /// 是否为必须填写的属性
        /// </summary>
        public bool IsRequired
        {
            get;
            set;
        }
        /// <summary>
        /// 属性的默认值
        /// </summary>
        public string DefaultValue
        {
            get;
            set;
        }
        /// <summary>
        /// 属性的数据源
        /// </summary>
        public string Datasource
        {
            get;
            set;
        }
        #endregion 

    }
 public class DeviceClass
    {

        #region 构造与析构
        public DeviceClass()
        {
            ExtraPropertyList = new List<ExtraProperty>();
        }
        #endregion

        #region 属性
        /// <summary>
        /// 设备类型GUID
        /// </summary>
        public string Guid
        {
            get;
            set;
        }
        /// <summary>
        /// 设备类型的名称
        /// </summary>
        public string Name
        {
            get;
            set;
        }
        /// <summary>
        /// 设备类型的图标名称
        /// </summary>
        public string IconName
        {
            get;
            set;
        }
        /// <summary>
        /// 设备类型的扩展属性
        /// </summary>
        public List<ExtraProperty> ExtraPropertyList
        {
            get;
            set;
        }
        #endregion 
    }
class XMLOpertation
    {
       // 这里是XML文件的路径,测试者可以替换成自己的路径以及文件名
        string path = @"E:\VioletMoon\Project\VioletMoon2010\BaseKownLedge\XmlSerialiationUT\bin\Debug\DeviceClass.xml";
        public  void Serialiton(Type type, object obj)
        {
            XmlSerializer ser = new XmlSerializer(type);       
            TextWriter writer = new StreamWriter(path);
            ser.Serialize(writer, obj);
        }
        public object Desr(Type type)
        {
            XmlSerializer ser = new XmlSerializer(type);
            TextReader reader=new StreamReader(path);
            object obj= ser.Deserialize(reader);
            return obj;
        }
    }
class Program
    {
        static void Main(string[] args)
        {

            ExtraProperty pro = new ExtraProperty();
            pro.PropertyGuid = "aa";
            pro.PropertyName = "今日发电";
            pro.IsRequired = true;
            pro.DefaultValue = "1000KW";
            pro.Datasource = "int";

            DeviceClass dc= new DeviceClass();
            dc.Guid = "9asf8d-a8gwe8g-af9ef";
            dc.Name = "光伏起";
            dc.IconName = "11";
            dc.ExtraPropertyList.Add(pro);

            XMLOpertation xo = new XMLOpertation();
            xo.Serialiton(dc.GetType(), dc);

            Console.ReadLine();
        }

还有我在网上看到这么一篇文章http://www.cnblogs.com/zsh_robot/articles/1323949.html
貌似里面提到的问题,我这里都出现了,可是为什么我还是不报错?
DeviceClass.xml文件的结果是:如下

加载中
0
愤怒的晃晃
愤怒的晃晃
哥们,是List<T>的数组。不是List<T>
0
junwong
junwong
为什么不考虑用.net自带的JSON进行序列化与反序列化呢
IdleMan
IdleMan
XML
0
寻找爱玩Tom
寻找爱玩Tom

我不是序列化后再网络中传输,我是序列化为文件,JSON没看过

寻找爱玩Tom
寻找爱玩Tom
@junwong 嗯,谢谢这么兄台的建议,我会去学习的
junwong
junwong
建议了解下JSON吧,它比XML序列化后保存的文件要小一些
返回顶部
顶部