将C#对象序列化为特定格式

时间:2013-12-11 22:59:02

标签: c# xml serialization format xml-namespaces

我使用以下代码序列化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>

有没有人对如何制作正确的格式有任何建议?

2 个答案:

答案 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);

这提供了对输出的完全控制,并允许基于循环,条件等制作更复杂的逻辑。