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>
  • 相关阅读:
    Python笔记 #17# Pandas: Merge
    MVC相关资料收集
    Python笔记 #16# Pandas: Operations
    Least slack time scheduling
    Python笔记 #15# Pandas: Missing Data
    Python笔记 #14# Pandas: Selection
    C++中const引用的是对象的时候只能调用该对象的f()const方法
    模板与泛型编程
    c++中的单例模式
    C/C++异常处理机制
  • 原文地址:https://www.cnblogs.com/Freeway/p/5001130.html
Copyright © 2011-2022 走看看