【问题标题】:Converting string to System.IO.Stream将字符串转换为 System.IO.Stream
【发布时间】:2017-02-22 18:55:56
【问题描述】:

我创建了一个可序列化的类并添加了一些对象。 现在我希望在单击按钮时创建一个 xml 文件(基于该类),所以我这样做了:

private void Button1_Clicked(object sender, EventArgs e)
        {
            string fileName = "Data.xml";
            MySerializableClass msc = new MySerializableClass();
            XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass));
            StreamWriter sw = new StreamWriter(fileName, Encoding.UTF8); //'filename' is underlined
            serializer.Serialize(sw, msc);
            sw.Close(); //'Close' is underlined
            //'StreamWriter' does not contain a definition for 'Close' [...]
        }

不幸的是,我收到以下错误:cannot convert from 'String' to em> 'System.IO.Stream'。这是什么意思?我不明白为什么编码为 UTF8 不起作用。不使用编码会给我同样的错误。

【问题讨论】:

  • 附带说明,请尝试在您的 StreamWriter 上使用 using 语句

标签: c# xml serialization xamarin


【解决方案1】:

streamwriter 构造函数参数错误..

        string fileName = "your file path";
        using(FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate))
        {
            using (StreamWriter sw = new StreamWriter(fileStream, Encoding.UTF8))
            {
                MySerializableClass msc = new MySerializableClass();
                XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass));
                serializer.Serialize(sw, msc);
            }
        }

如果你想不使用 FileStream,使用这个构造函数.. StreamWriter(string path, bool append, Encoding encoding)

        string fileName = "your file path";
        using (StreamWriter sw = new StreamWriter(fileName, true, Encoding.UTF8))
        {
            MySerializableClass msc = new MySerializableClass();
            XmlSerializer serializer = new XmlSerializer(typeof(MySerializableClass));
            serializer.Serialize(sw, msc);
        }

【讨论】:

  • 非常感谢先生!我从未使用过序列化,所以我只是在这里查看msdn.microsoft.com/en-us/library/szzyf24s(v=vs.110).aspx 并认为它会那么容易。祝你有美好的一天!
  • PCL 中是否可能没有“FileStream”?我收到“找不到类型或命名空间名称‘文件流’”错误。有什么想法吗?
  • 这绝对行不通,我将代码直接剪切并粘贴到我的程序中,只根据需要更改变量名。我看到了同样的错误。传递给 StreamWriter 的文件路径会产生字符串无法转换为 System.IO.Stream 的错误
【解决方案2】:

请参阅StreamWriter 的文档。 https://msdn.microsoft.com/en-us/library/system.io.streamwriter(v=vs.110).aspx

试试这个重载StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8);

或者你需要从“data.xml”文件创建一个流,而不是仅仅传递文件名。

【讨论】:

  • 好的,谢谢。我只是看了这个例子msdn.microsoft.com/en-us/library/szzyf24s(v=vs.110).aspx 并认为它会起作用。那么我将如何更改代码才能获得我想要的结果?
  • @levent 的回答提供了完整的解决方案。我更新了我的答案以包括应该适合你的重载。您也可以只提供文件名而不是文件名和编码。
  • sw(fileName, false, Encoding.UTF8) 也不起作用,必须尝试@levent 的解决方案,但还是谢谢你!
  • 如果您能提供除“将无法工作”之外的更多信息,我可以尝试提供进一步的帮助。
  • 根据VS应该是这样的:StreamWriter(Stream stream, Encoding encoding, int bufferSize, bool leaveOpen)
猜你喜欢
  • 2011-05-18
  • 2011-12-24
  • 2017-08-17
  • 1970-01-01
  • 2019-07-05
  • 2017-12-09
  • 2019-10-10
  • 2019-01-05
相关资源
最近更新 更多