繁体   English   中英

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

[英]Serialize C# objects to specific format

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

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

对于这样的序列化需要使用SoapFormatter。 详细信息可以在MSDN( SoapFormatter )的描述中找到。

如果你的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);

这样可以完全控制输出,并允许根据循环,条件等制作更复杂的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM