C#下XML序列化出现System.InvalidOperationException的一种解释

本文讨论了在非泛型类中使用泛型变量时可能出现的XML序列化问题,并提供了解决方案。通过案例分析,展示了如何避免此类错误,确保数据正确序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Type.IsGenericParameter属性为false

当某个类的IsGenericParameter属性为false时,是表示该类为非泛型类或方法。

此时,如果该类的变量中或者方法的参数,包含泛型变量,则会产生该错误。

 

public class XXXX : MsgParent, IMsg
{
        public XXXX()
        {
            this.MessageType = "XXXX";
        }
        /// <summary>
        /// 确认队列
        /// </summary>
        public Queue<int> queue = new Queue<int>();

        /// <summary>
        /// 
        /// </summary>
        public int AlarmID = 0;

 

        public string Serialize()
        {

            string strSource = "";
            try
            {
                XmlSerializer s = new XmlSerializer(typeof(XXXXX));
                Stream stream = new MemoryStream();
                s.Serialize(stream, this);
                stream.Seek(0, SeekOrigin.Begin);
                using (StreamReader reader = new StreamReader(stream))
                {
                    strSource = reader.ReadToEnd();
                }
            }
            catch { }
            return strSource;
        }

        public static XXXXX Deserialize(string xmlSource)
        {
            XXXXX obj = new XXXXX();
            try
            {
                XmlSerializer x = new XmlSerializer(typeof(XXXXX));
                Stream stream = ProtocolHelper.GetStream(xmlSource);
                stream.Seek(0, SeekOrigin.Begin);
                obj = (XXXXX)x.Deserialize(stream);
                stream.Close();
            }
            catch
            { }
            return obj;
        }

    }

}

 

例如这样,就可能产生XML序列化出错。如果把Queue去掉的话,该问题又解决了。

但是这样又多出了许多麻烦。想要用到数据结构存储的话,就难免出现这样。如果是自己写一个数据结构(不用泛型),我想应该是可以的吧。

http://msdn.microsoft.com/zh-cn/library/system.type.isgenericparameter.aspx

MSDN上的参考资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值