ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – XmlSerializer保存临时文件的最安全的地方

2019-06-30 13:02:01  阅读:215  来源: 互联网

标签:c xmlserializer datacontractjsonserializer


我注意到XmlSerializer需要使用磁盘空间来进行出价.如果没有可写的%temp%文件夹,则它会失败并显示错误,如下所示:

Source : System.Xml Message : Unable to generate a temporary class (result=1). error CS2001: Source file 'C:\Windows\TEMP\c1ls4elp.0.cs' could not be found error CS2008: No inputs specified StackTrace : at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace) at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace) at StreamLib.Tuna.SerializationHelper.Deserialize[T](String presetsString) ...

作为参考,StreamLib.Tuna.SerializationHelper.Deserialize [T]的实现如下:

    public static T Deserialize<T>(this string data) where T:class
    {
        var type = typeof(T);

        XmlSerializer serializer = new XmlSerializer(type);
        using (TextReader reader = new StringReader(data))
        {
            try
            {
                return (T)serializer.Deserialize(reader);

            }
            catch
            {

                return null;
            }
        }
    }

更改文件夹的权限是我认为最好留给用户而不是一个狡猾的序列化程序的补丁,所以我想通过给其他地方的序列化程序来编写它的垃圾来解决问题.这可以通过在app.config / web.config中添加以下内容来实现:

<system.xml.serialization> 
  <xmlSerializer tempFilesLocation="c:\\foo"/> 
</system.xml.serialization>

我的问题是,是否有一个防弹位置用于此设置,在某些客户端计算机上不会失败?如果没有,我的替代方案是什么? DataContractJsonSerializer是否也以相同的方式需要磁盘空间?

解决方法:

DataContractSerializer,NetDataContractSerializer和DataContractJsonSerializer都是你的好选择.它们不需要磁盘空间,也不会将组件发送到磁盘.相反,它们在运行中(在内存中)生成IL并在后续序列化事件中使用它来在它们正在运行的AppDomain中进行序列化和反序列化.XmlSerializer确实需要磁盘空间,正如您所发现的那样.从好的方面来说,您不需要更改任何类型 – 只需更换序列化程序就可以了,因为DataContractSerializer支持Microsoft发布的所有其他序列化程序的序列化格式,模型和范例在.NET中

标签:c,xmlserializer,datacontractjsonserializer
来源: https://codeday.me/bug/20190630/1336998.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有