我注意到XmlSerializer需要使用磁盤空間來執行其出價。如果沒有寫入%temp%文件夾,然後將其失敗,錯誤如下:XmlSerializer保存臨時文件的最安全位置
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;
}
}
}
更改文件夾的權限是我認爲最好留給用戶的,而不是針對不友好的序列化程序的修補程序,所以我想通過將序列化程序放在其他地方來編寫它的廢話來解決問題。
<system.xml.serialization>
<xmlSerializer tempFilesLocation="c:\\foo"/>
</system.xml.serialization>
我的問題是,是否有防彈位置使用此設置,將不會在某些客戶端機器失敗:這可以通過將下面以app.config/web.config
實現?如果不是,我的替代品是什麼? DataContractJsonSerializer
是否也需要使用相同的磁盤空間?
我認爲最好的方式將是當前用戶的臨時文件夾。這應該始終是可寫的。 –