我正在生成一个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个问题
- 我写的代码不会替换为“”,它不会抛出异常,但它也不起作用,我不知道为什么? - 有一个快速更好的方法来解决我的问题。
答案 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返回一个修改过的字符串,除非返回结果,否则只使用扩展名不会做任何事情。