我正在尝试从C#类生成XML字符串,但我无法完成我需要的操作。这是我到目前为止所做的。
以下两个类是我的实体:
[Serializable]
[XmlRoot("FooQuery")]
public class Foo
{
[XmlElement("Prop1")]
public int MyProperty1 { get; set; }
[XmlElement("Prop2")]
public string MyProperty2 { get; set; }
[XmlElement("Bar", typeof(Bar))]
public List<Bar> Bar { get; set; }
}
[Serializable]
public class Bar
{
[XmlElement("Prop1")]
public int MyProperty1 { get; set; }
[XmlElement("Prop2")]
public string MyProperty2 { get; set; }
}
这是我的实施:
static void Main(string[] args)
{
var foo = new Foo {
MyProperty1 = 1,
MyProperty2 = "FooBar",
Bar = new List<Bar> {
new Bar { MyProperty1 = 1, MyProperty2 = "Foo" },
new Bar { MyProperty1 = 2, MyProperty2 = "Bar" }
}
};
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
using (MemoryStream memStream = new MemoryStream()) {
using (XmlTextWriter xmlWriter = new XmlTextWriter(memStream, Encoding.UTF8)) {
serializer.Serialize(xmlWriter, foo);
}
string xmlQuery;
xmlQuery = Encoding.UTF8.GetString(memStream.GetBuffer());
xmlQuery = xmlQuery.Substring(xmlQuery.IndexOf(Convert.ToChar(60)));
xmlQuery = xmlQuery.Substring(0, (xmlQuery.LastIndexOf(Convert.ToChar(62)) + 1));
Console.WriteLine(xmlQuery);
}
}
这是我得到的结果:
<?xml version="1.0" encoding="utf-8" ?>
<FooQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Prop1>1</Prop1>
<Prop2>FooBar</Prop2>
<Bar>
<Prop1>1</Prop1>
<Prop2>Foo</Prop2>
</Bar>
<Bar>
<Prop1>2</Prop1>
<Prop2>Bar</Prop2>
</Bar>
</FooQuery>
我需要的是摆脱xml版本和编码,如下所示:
<FooQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Prop1>1</Prop1>
<Prop2>FooBar</Prop2>
<Bar>
<Prop1>1</Prop1>
<Prop2>Foo</Prop2>
</Bar>
<Bar>
<Prop1>2</Prop1>
<Prop2>Bar</Prop2>
</Bar>
</FooQuery>
这也可以很好地摆脱命名空间,但它并不大 但这对我来说并不是什么大不了的事。
我可以使用String.Replace方法执行此操作,但我认为这是一种肮脏的方法:
xmlQuery.Replace(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>",
string.Empty
);
有什么想法吗?