使用String.Replace修改XML Serializer输出的问题

时间:2011-03-21 19:28:31

标签: c# xml xml-serialization

我正在生成一个xml文件。我在文件中注意到它有一个我不想要的标签。我正在从xmlSerializer对象生成xml文件,它正在做什么是在我的对象上处理一个属性错误...我的对象lloks就像这样......

public List<ProductVarient> Varients { get; set; }

所以当我序列化它时,我会得到一个像这样的结构

<Varients>
  <ProductVarient>
     <Name>Nick</Name>
     ......

我想要

  <AnotherProp>
     <Stuff>toys</Stuff>
  </AnotherProp>
  <ProductVarient>
     <Name>Nick</Name>
  </ProductVarient>
  <ProductVarient>
     <Name>Jeff</Name>
  </ProductVarient>
....

因此,我没有尝试解决xmlserializer问题,而是选择了超级hack并编写了此代码

 string s = File.ReadAllText(path);
    s.Replace("<Varients>", "");
    s.Replace("</Varients>", "");

    using (FileStream stream = new FileStream(path, FileMode.Create))
    using (TextWriter writer = new StreamWriter(stream))
    {
        writer.WriteLine("");
        writer.WriteLine(s);
    }

2个问题

- 我写的代码不会替换为“”,它不会抛出异常,但它也不起作用,我不知道为什么? - 有一个快速更好的方法来解决我的问题。

3 个答案:

答案 0 :(得分:6)

尝试:

s = s.Replace("<Varients>", "");
s = s.Replace("</Varients>", ""); 

String是不可变的,像Replace 这样的方法会返回结果而不是改变接收者。

更新但是,正如John Saunders所述,更好的解决方案是使用XmlSerializer来实现您的目标:

[XmlElement("ProductVarient")]
public List<ProductVarient> Varients { get; set; }

答案 1 :(得分:2)

您应该学会正确使用它,而不是试图“解决”XmlSerializer。

尝试在您的媒体上放置[XmlElement]

[XmlElement]
public List<ProductVarient> Varients { get; set; }

或者,您可以尝试[XmlArray]和[XmlArrayItem]属性。你还没有展示你想要的XML的好例子(如果列表中有多个项目你想要什么?),所以我不能告诉你应该使用哪个。

答案 2 :(得分:0)

糟糕的黑客,应该被送到它的房间,但要回答你的问题:

 string s = File.ReadAllText(path);
    s = s.Replace("<Varients>", "");
    s = s.Replace("</Varients>", "");

    using (FileStream stream = new FileStream(path, FileMode.Create))
    using (TextWriter writer = new StreamWriter(stream))
    {
        writer.WriteLine("");
        writer.WriteLine(s);
    }

Replace返回一个修改过的字符串,除非返回结果,否则只使用扩展名不会做任何事情。