[英]Saving XDocument to file in PCL C#
我在PCL库中工作,需要序列化一个类并输出到文件。 我的空间很短,所以没有足够的空间来存放PCLStorage。
目前,我正在使用它进行序列化。 IFilePath从非PCL部分返回文件路径。
IFilePath FilePath;
public void SerializeObject<T>(T serializableObject, string fileName)
{
if (serializableObject == null) { return; }
try
{
using (var ms = new MemoryStream())
{
var xmlDocument = new XDocument();
using (var writer = xmlDocument.CreateWriter())
{
var serialize = new DataContractSerializer(typeof(T));
serialize.WriteObject(writer, serializableObject);
xmlDocument.Save(ms, SaveOptions.None);
}
}
}
catch (Exception ex)
{
//Log exception here
}
}
当我尝试保存时,什么都没有显示。 我感觉是因为我没有将流输出到文件中,但是我对如何执行此操作感到茫然。
问题是您using (var ms = new MemoryStream())
的变量ms using (var ms = new MemoryStream())
为空,并且没有指向MemoryStream不会接收文件路径作为参数的任何文件位置。 我建议您改用StreamWriter,然后将FileStream传递给它。 例
使用您的fileName创建一个从Stream类继承的FileStream,然后用新创建的文件流替换Memory流,如下所示。
using(FileStream stream = File.OpenWrite(fileName))
{
var xmlDocument = new XDocument();
using (var writer = xmlDocument.CreateWriter())
{
var serialize = new DataContractSerializer(typeof(T));
serialize.WriteObject(writer, serializableObject);
xmlDocument.Save(stream, SaveOptions.None);
}
}
希望这可以帮助。
您正在尝试将特定于每个平台的操作保存到文件中。 PCLStorage正在为每个平台实现此功能,如果您不能使用它,这也是您必须要做的。
在这种情况下,您要做的是在非pcl代码中创建流(在每个平台中),然后将其传递给函数,如下所示:
public void SerializeObject<T>(T serializableObject, Stream fileStream)
{
if (serializableObject == null) { return; }
try
{
var xmlDocument = new XDocument();
using (var writer = xmlDocument.CreateWriter())
{
var serialize = new DataContractSerializer(typeof(T));
serialize.WriteObject(writer, serializableObject);
xmlDocument.Save(fileStream, SaveOptions.None);
}
}
catch (Exception ex)
{
//Log exception here
}
}
更多关于pcl的信息 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.