将对象加载到XDocument

时间:2017-10-06 14:30:49

标签: c# xml

我有一个* .xml文件,我已添加到我的解决方案中,并将其构建操作设置为“Resource”。我想将其内容加载到List<string>

我发现我可以使用ResourceManager访问该文件(经过多次尝试后,我认为无法以其他方式访问该文件。)

但是XDocument.Load需要一个Uri,我不知道它对我的文件是什么,因为它与我在其他问题和MSDN上阅读的内容不兼容。

以下是我的解决方案结构图,与文件有关:
Da filez(我需要“ServerList.xml”)

我尝试使用以下Uris:

  • ServerList.xml
  • \ ServerList.xml
  • 数据\ ServerList.xml
  • \数据\ ServerList.xml
  • /ServerList.xml
  • 数据/ ServerList.xml
  • /Data/ServerList.xml

他们都没有工作 这段代码确实有点:

var rm = new ResourceManager("SQLExecutor.g", Assembly.GetExecutingAssembly());
var rset = rm.GetResourceSet(CultureInfo.InvariantCulture, true, true);
var obj = SerializeToStream rset.GetObject(@"data/serverlist.xml", true);

所以,现在,obj是一个对象,但我需要一个Uri或一个流传递给XDocument.Load。我实际上只需要从* .xml中获取信息,并且只使用XDocument,因为我认为这是最好的,但在序列化obj时遇到问题。

那么,为了能够在XDocument中加载这个“ServerList.xml”文件,我应该做什么呢,所以我可以使用它?

1 个答案:

答案 0 :(得分:2)

检查链接https://stackoverflow.com/a/18680852/7974050,是否符合您的目的。

或者,你可以

将文件Build Action设置为 Embedded Resource 。假设,xml文件位于应用程序的根目录中。现在,当您构建解决方案时,它将嵌入到dll中。

    You can get this data in 

    XmlReader reader = XmlReader.Create(new StringReader(GetResourceTextFile("postdata.xml")));

然后在XDocument中加载此阅读器。

    public string GetResourceTextFile(string filename)
    {
        string result = string.Empty;
        //  In the code below, replace xyz. with the name of your dll + .
        // (dot). Idea is to treat file like dllName.filename.xml
        using (Stream stream = this.GetType().Assembly.
                   GetManifestResourceStream("xyz." + filename))
        {
            using (StreamReader sr = new StreamReader(stream))
            {
                result = sr.ReadToEnd();
            }
        }
        return result;
    }