c# - 如何在 xml 序列化中的标记后创建新行

标签 c# xml-serialization

我使用 xml 序列化来创建 xml 片段。每个序列化不会在末尾创建换行符,从而导致打开标签跟随关闭标签。请参阅下面的示例输出,其中关闭标记位于同一行打开标记
如何强制序列化对象换行?

    maxmumleewayinticks=Instrument.MasterInstrument.TickSize*2;

    string filename="c:\\temp\\Strategyxmlfile" + DateTime.Now.Ticks + ".xml";
    settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.IndentChars = "  ";
    settings.NewLineChars = "\r\n";
    settings.NewLineHandling = NewLineHandling.Replace;
    settings.OmitXmlDeclaration = true;
    settings.CloseOutput = false;   
    writer= new StreamWriter(filename);

    ns.Add("", "");
   // write and close the bar

   XmlSerializer serializer = new        XmlSerializer(typeof( DecisionBar));

   w =XmlWriter.Create(writer,settings);

   serializer.Serialize(w, decision,ns);

输出:

<DecisionBar EntryOrExit="ENTRY">
  <mfe>0.0001</mfe>
  <mae>-0.0002</mae>
  <bartime>2012-07-25T21:43:00</bartime>
  <frequency>1 MINUTES</frequency>
  <HH7>true</HH7>
  <crossover>true</crossover>
  <currentprofitability>0.0001</currentprofitability>
  <entryPointLong>1.032</entryPointLong>
  <entryPointShort>1.0308</entryPointShort>
  <exitStopFull>1.031</exitStopFull>
  <exitStopPartial>0</exitStopPartial>
 </DecisionBar><DecisionBar> 
  <mfe>0.0001</mfe>
  <mae>-0.0002</mae>
  <bartime>2012-07-25T21:44:00</bartime>
  <frequency>1 MINUTES</frequency>
  <HH7>false</HH7>
  <crossover>false</crossover>
  <currentprofitability>0.0001</currentprofitability>
  <entryPointLong>0</entryPointLong>
  <entryPointShort>0</entryPointShort>
  <exitStopFull>0</exitStopFull>
  <exitStopPartial>0</exitStopPartial>
</DecisionBar>

最佳答案

看看here :

try
{
    MemberList g = new MemberList("group name");
    g.members[0] = new Member("mem 1");
    g.members[1] = new Member("mem 2");
    g.members[2] = new Member("mem 3");

    StringWriter sw = new StringWriter();
    XmlTextWriter tw = new XmlTextWriter(sw);
    tw.Formatting = Formatting.Indented;
    tw.Indentation = 4;

    XmlSerializer ser = new XmlSerializer(typeof(MemberList));
    ser.Serialize(tw, g);

    tw.Close();
    sw.Close();

    Console.WriteLine(sw.ToString());
}
catch(Exception exc)
{
    Console.WriteLine(exc.Message);
}

这将为您提供所需的结果,尽管它需要一些额外的工作,而不仅仅是在 XmlSerializer 上指定一些选项。

编辑:有很多变体。我找到了这个Googling ;你也可以这样做。

关于c# - 如何在 xml 序列化中的标记后创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661665/

相关文章:

c# - 如果作为托管身份运行,您可以创建/删除/更新存储的访问策略吗?

c# - Observable.FromAsync 内存泄漏 [墨尔本开发者/Devicenet]

c# - C# 中的字符串解析(对我来说)很困难(正则表达式?)

c# - 在异步方法中返回和等待任务之间的区别

c# - 使用 XmlSerializer 设置 xml header

c# - 表示不被序列化的类的属性

xml - 如何使用 TJvAppXMLFileStorage 将 Delphi TObjectList<TMyClass> 类型序列化为 XML?

c# - 如何使用 USPS 验证给定地址?

java - JAXB 将循环引用映射到 XML

.net - 如何控制.NET DataContract序列化,使其使用XML属性而不是元素?