我的环境是xp + IIS5 + vs2008
我写了一个序列化的代码,一模一样的代码在winform中可以正常序列化和反序列化,但放在webform后就始终提示错误“生成 XML 文档时出错”
用户代码未处理 System.InvalidOperationException
  Message="生成 XML 文档时出错。"
  Source="System.Xml"
  StackTrace:
       在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
       在 System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o)
       在 _Default.Button2_Click(Object sender, EventArgs e) 位置 f:\dotnetWeb\ExpOffice\web\Default.aspx.cs:行号 82
       在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       在 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: System.InvalidCastException
       Message="无法将类型为“CsData”的对象强制转换为类型“CsData”。"
       Source="6w2wnbkp"
       StackTrace:
            在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCsData.Write3_CsData(Object o)
       InnerException: 
我查了一下资料似乎是使用到window/temp目录而引起的权限问题,但我把该目录的权限开发到everyone的完全控制,错误依然,请问怎么解决,麻烦知道的指点一下,谢谢

解决方案 »

  1.   


    using System.IO;
    using System.Xml.Serialization;/// <summary>
            /// 序列化
            /// </summary>
            /// <typeparam name="T">待序列化对象的类型</typeparam>
            /// <param name="obj">待序列化对象</param>
            /// <param name="fileName">文件路径名</param>
            /// <returns></returns>
            public static bool Serialize<T>(T obj, string fileName)
            {
                bool bl = false;
                if (!Directory.Exists(Path.GetDirectoryName(fileName)))
                    Directory.CreateDirectory(Path.GetDirectoryName(fileName));
                if (File.Exists(fileName))
                    File.Delete(fileName);
                XmlSerializer mySerializer = new XmlSerializer(typeof(T));
                using (StreamWriter sw = new StreamWriter(fileName))
                {
                    try
                    {
                        mySerializer.Serialize(sw, obj);
                        bl = true;
                    }
                    catch {
                        //log process                    
                    }
                }
                return bl;
            }
      

  2.   

    不会吧,难道这个问题就只有我碰到,难道大家都没用序列化吗?居然没有一个人有提供点意见TO qingniaoIT:
    我不是不会写序列化的代码,是执行时出现莫名错误,我不知你有没有在WebForm中执行过,有没有遇到我说的问题
      

  3.   

    一般都是无法写入temp文件夹造成的,再检一下权限吧,asp.net的用户也开放更多权限试试,
      

  4.   

    我把temp目录开放给everyones完全控制的权限,同时把aspnet和IIS的两个帐号都加入到administrators的群组中,错误依然,都快崩溃了
      

  5.   

    参考如下。
    http://topic.csdn.net/u/20090108/18/328870AF-4F27-458A-B5BB-94FC949F8973.html
      

  6.   

    问题解决了,问题是这样的,我是用反射动态生成一个对象,然后再把它序列化,至于为什么这样做我就不说原因了,如果这个来源的dll文件不在bin目录下就没问题,但我不能不把它放到bin目录,尝试了很久才发现把原先的Assembly.LoadFile改成Assembly.LoadFrom就没这个错误了,我搞不明白它们的差别会解决该错误,反正就这样不明不白的解决了虽然大家的回复对我解决问题没有帮助,但Roc_Lee 提供的连接还是让我收益不少,分就主要给他好了,谢谢