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

本文关键字:XML 资源 源文件 序列化 | 更新日期: 2023-09-27 18:08:49

所以我正在编写一个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未处理-空路径名不合法。

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

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

正在引发异常,因为您正在将Resources.Maps传递到StreamWriter。StreamWriter将其作为字符串处理,并假设它是流的文件路径。但是文件路径为空,因此会抛出异常。

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

如果你正在写。resx文件,那么ResXResourceWriter就是你需要的类。它还可以处理流写入。请参阅http://msdn.microsoft.com/en-us/library/system.resources.resxresourcewriter.aspx和http://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。

StreamWriter构造函数抛出异常是因为资源。Maps为空字符串。

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

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

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