我在我的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
}
}
当我尝试保存时,没有任何显示。我有一种感觉,因为我没有将流输出到文件,但我不知道如何做到这一点。
答案 0 :(得分:0)
问题是using (var ms = new MemoryStream())
中的变量ms为空,并且没有指向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);
}
}
希望这有帮助。
答案 1 :(得分:0)
您正在尝试保存到文件,这是一个特定于每个平台的操作。 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 here。