XMLSerializer保存临时文件的最安全地方[英] Safest place for the XmlSerializer to save temp files

本文是小编为大家收集整理的关于XMLSerializer保存临时文件的最安全地方的处理方法,想解了XMLSerializer保存临时文件的最安全地方的问题怎么解决?XMLSerializer保存临时文件的最安全地方问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我注意到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和datacontractjsonserialializer都将是您的替代方案.它们不需要磁盘空间,也不需要散发磁盘的组件.取而代之的是,它们在记忆中即时生成IL,并在随后的序列化情节中使用它来进行序列化和进行序列化,并在其操作的AppDomain中进行序列化.XMLSerialializer确实需要磁盘空间.从好的方面来看,您不需要更改任何类型 - 只需替换序列化器即可,您应该做得好,因为Datacontractserializer支持Microsoft曾经发货的所有其他连续剧器的序列化格式,模型和范式在.net

本文地址:https://www.itbaoku.cn/post/1794037.html