zoukankan      html  css  js  c++  java
  • .NET 序列化成XML, 并且格式化

    现有Person类:

        [Serializable]
        public class Person
        {
            public string Name;
            public string Info;
    
            public Person(string name)
            {
                Name = name;
            }
    
            [OnSerializing]
            public void BeforeSerialize(StreamingContext context)
            {
                Info = "Welcome, " + Name;
            }
        }

    直接用DataContractSerializer 序列化到文件后, 结果如:

    <?xml version="1.0" encoding="utf-16"?><ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyNamespace"><Person><Info>Welcome, Jeff</Info><Name>Jeff</Name></Person><Person><Info>Welcome, Frank</Info><Name>Frank</Name></Person></ArrayOfPerson>

    要让序列化后的XML更可读, 可以借助于XDocument , 测试代码:

            public void TestSerialize()
            {
                var persons = new List<Person>()
                {
                    new Person("Jeff"),
                    new Person("Frank")
                };
                string file = "out.xml";
                var dcs = new DataContractSerializer(typeof(List<Person>));
    
                // Serialize
                var sb = new StringBuilder();
                var xw = XmlWriter.Create(sb);
                dcs.WriteObject(xw, persons);
                xw.Close();
    
                var sw = new StreamWriter(file, false, Encoding.Unicode);
                var doc = XDocument.Parse(sb.ToString());
                //sw.Write(sb.ToString());
                sw.Write(doc.ToString());
                sw.Close();
    
                // Deserialize
                var xr = XmlReader.Create(file);
                var ps = (List<Person>)dcs.ReadObject(xr);
                Console.WriteLine(ps[1].Info);
            }

    结果:

    <ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MyNamespace">
      <Person>
        <Info>Welcome, Jeff</Info>
        <Name>Jeff</Name>
      </Person>
      <Person>
        <Info>Welcome, Frank</Info>
        <Name>Frank</Name>
      </Person>
    </ArrayOfPerson>
  • 相关阅读:
    程序员修炼之道:从小工到专家有感2
    3月13日
    第一次结对作业(2)
    3月12日
    3月11日
    第一次结对作业
    3月10日
    11月6日
    10月28日
    10月7日
  • 原文地址:https://www.cnblogs.com/Freeway/p/5001130.html
Copyright © 2011-2022 走看看