gpt4 book ai didi

c# - XmlSerializer 保存临时文件的最安全位置

转载 作者:行者123 更新时间:2023-11-30 12:15:18 27 4
gpt4 key购买 nike

我注意到 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 保存临时文件的最安全位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com