我使用以下代码序列化Vehicle对象以序列化对象:
XmlSerializer serializer = new XmlSerializer(typeof(Vehicle));
using (StreamWriter sw = new StreamWriter(RESULTS_FILE_PATH_))
using (XmlWriter writer = new XmlTextWriter(sw))
{
try
{
serializer.Serialize(writer, vehicles[0]);
}
catch (Exception exception)
{
Console.WriteLine("Exception thrown: " + exception);
}
}
结果如下:
<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<modelYear xmlns="urn:configcompare4g.kp.chrome.com">2014</modelYear>
<subdivisionName xmlns="urn:configcompare4g.kp.chrome.com">Buick</subdivisionName><modelId
</Model>
我需要格式如下:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ModelArrayElement xmlns="urn:configcompare4g.kp.chrome.com">
<model>
<modelYear>2014</modelYear>
<subdivisionName>Buick</subdivisionName>
</model>
</ModelArrayElement>
</S:Body>
</S:Envelope>
有没有人对如何制作正确的格式有任何建议?
答案 0 :(得分:4)
对于这样的序列化需要使用SoapFormatter。 有关详细信息,请参阅MSDN上的说明 (SoapFormatter)。
答案 1 :(得分:-1)
如果你的XML输出是非标准的并且很难使用任何默认的格式化程序,我会考虑使用一些模板引擎,比如RazorEngine,所以它会是这样的:
string template =
@"<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">"+
"<S:Body>"+
" <ModelArrayElement xmlns="urn:configcompare4g.kp.chrome.com">"+
" <model>"+
" <modelYear>@Model.modelYear</modelYear>"+
" <subdivisionName>@Model.subdivisionName</subdivisionName>"+
" </model>"+
" </ModelArrayElement>"+
"</S:Body>"+
"</S:Envelope>";
var model = vehicles[0];
string result = Razor.Parse(template, model);
这提供了对输出的完全控制,并允许基于循环,条件等制作更复杂的逻辑。