繁体   English   中英

将XDocument保存到PCL C#中的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM