将xml转换为字符串并再次返回会产生“根元素错误”

时间:2017-08-10 06:34:47

标签: c# xml

我正在将“不寻常”的xml转换为字符串。我说不寻常,因为我使用.NET ChartSerializer来保存winforms图表状态:

var xml = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    chart1.Serializer.Save(ms);
    xml.Load(ms);
}

如果我使用

转换为字符串
using (StringWriter sw = new StringWriter())
{
     using (XmlTextWriter txt = new XmlTextWriter(sw))
     {
         xml.WriteTo(txt);
         string str = sw.ToString();
         fuse.c1 = str;
     }
}

并将其保存到文件中(我已尝试过JSON,txt,xml),然后使用

转换回来
var xml = new XmlDocument();
xml.LoadXml(fuse.c1);
using (MemoryStream ms = new MemoryStream())
{
    xml.Save(ms);
    chart1.Serializer.Load(ms);
}

我收到错误root element is missing

我不明白错误,因为我只是转换为字符串,然后再使用相同的类等。

我对xml不是很熟悉,有人能发现我的错误吗?我正在尝试保存多个winforms图表而不为每个图表添加.xml文件

示例xml:

<Chart Size="854, 215">
  <Series>
    <Series Name="Series1" Legend="Legend1" ChartArea="ChartArea1" Color="Orange" LegendText="% Change">
      <Points>
        <DataPoint YValues="10.3973534917773" />
        <DataPoint XValue="0.2" YValues="8.37818721941151" />
        <DataPoint XValue="0.4" YValues="5.57375277883594" />
**snip many more data points**
     </Points>
    </Series>
  </Series>      
  <ChartAreas>
    <ChartArea Name="ChartArea1">
    </ChartArea>
  </ChartAreas>
</Chart>

1 个答案:

答案 0 :(得分:1)

您可以在评论中找到特定问题的答案 - 您需要回放信息流。

但值得注意的是,似乎有overloads接受TextWriterTextReader,所以你可以用更少的仪式来做你正在做的事情。

要保存,您可以使用StringWriter

using (var writer = new StringWriter())
{
    chart1.Serializer.Save(writer);
    fuse.c1 = writer.ToString();
}

要重新加载,您可以使用StringReader

using (var reader = new StringReader(fuse.c1))
{
    chart1.Serializer.Load(reader);
}