通过序列化写入XML资源文件

时间:2011-09-15 21:29:10

标签: c#

所以我正在编写一个C#应用程序,其中添加了几个XML文件作为资源。我从这些XML文件中读取使用XML序列化来填充代码中的对象,它完美地运行。所以我可以像这样访问文件(我已经留下了一些代码,只有重要的部分):

using TestApp.Properties;

XmlSerializer serializer = new XmlSerializer(typeof(MapTiles));
StringReader sr = new StringReader(Resources.Maps);
mapTiles = (MapTiles)serializer.Deserialize(sr);

然而,现在,我想做相反的事情。我想获取一些数据并将其写入这些XML资源文件。但是,我似乎在这方面遇到了麻烦,并希望有人能看到我弄乱的东西或让我知道我需要做什么?这就是我想要做的事情:

XmlSerializer serializer = new XmlSerializer(typeof(MapTiles));
TextWriter writer = new StreamWriter(Resources.Maps);
serializer.Serialize(writer, tempGroup);
writer.Close();

当我运行此代码时,我在第二行显示错误 ArgumentException未处理 - 空路径名称不合法。

所以,如果有人有任何想法,我会非常感谢一些提示。非常感谢。

3 个答案:

答案 0 :(得分:2)

由于您将Resources.Maps传递给StreamWriter,因此引发了异常。 StreamWriter将其作为字符串处理,并假设它是流的文件路径。但是文件路径是空的,所以它抛出异常。

要修复StreamWriter行,您可以指定本地临时文件而不是Resources.Maps或使用StringWriter和默认构造函数,例如new StringWriter()

如果您正在编写.resx文件,那么ResXResourceWriter就是您需要的课程。它也会处理你的流写。请参阅http://msdn.microsoft.com/en-us/library/system.resources.resxresourcewriter.aspxhttp://msdn.microsoft.com/en-us/library/ekyft91f.aspx。第二页有关于如何使用该类的示例,但很简单,您可以这样称呼:

XmlSerializer serializer = new XmlSerializer(typeof(MapTiles));

using (StringWriter stringWriter = new StringWriter())
{
  serializer.Serialize(stringWriter, tempGroup);

  using (ResXResourceWriter resourceWriter = new ResXResourceWriter("~/App_GlobalResources/some_file.resx"))
  {
     resourceWriter.AddResource("Maps", stringWriter.ToString());
  }
}

如果要写出其中包含动态创建资源的程序集,则可以发出新程序集。在这种情况下,请查看http://msdn.microsoft.com/en-us/library/8ye65dh0.aspx

答案 1 :(得分:0)

StreamWriter构造函数抛出异常,因为Resources.Maps是一个空字符串。

查看MSDN上的文档: http://msdn.microsoft.com/en-us/library/fysy0a4b.aspx

答案 2 :(得分:0)

嗯,在尝试了其他一些事情并进行更多研究之后,问题似乎是你无法写入属于应用程序的资源。与写入程序集的资源有关,因此它不可写。所以我必须修改我的方法并将输出写入另一个文件。

除非当然有人知道不同。这就是我到目前为止所发现的。感谢那些有一些想法的人,非常感谢。