【问题标题】:How to serialize selected properties only如何仅序列化选定的属性
【发布时间】:2014-08-21 04:50:03
【问题描述】:

我有一个类 Person ,它有一些公共属性。现在我想序列化人员类但仅使用一些选定的属性。这可以通过将该属性设为私有来实现,但我不想将任何属性更改为私有。

如果无法使用序列化,那么另一种方法是为仅具有选定属性的对象创建 xml 文档。

注意:所有属性都必须是公开的。

  class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            using (MemoryStream memoryStream = new MemoryStream())
            {
                XmlSerializer xmlSerializer = new XmlSerializer(person.GetType());
                xmlSerializer.Serialize(memoryStream, person);
                using (FileStream fileStream = File.Create("C://Output.xml"))
                {
                    memoryStream.WriteTo(fileStream);
                    fileStream.Close();
                }
                memoryStream.Close();
            }
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public double Salary { get; set; }

        public Person()
        {
            Id = 1;
            Name = "Sam";
            Salary = 50000.00;
        }
    }

电流输出

  <?xml version="1.0"?>
  <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Id>1</Id>
    <Name>Sam</Name>
    <Salary>50000</Salary>
  </Person>

预期输出

  <?xml version="1.0"?>
  <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">   
    <Salary>50000</Salary>
  </Person>

【问题讨论】:

    标签: c# xml c#-4.0 xml-serialization


    【解决方案1】:

    您可以使用XmlIgnore 属性..

     public class Person
        {
            [XmlIgnore]
            public int Id { get; set; }
            [XmlIgnore]
            public string Name { get; set; }
            public double Salary { get; set; }
    
            public Person()
            {
                Id = 1;
                Name = "Sam";
                Salary = 50000.00;
            }
        }
    

    this

    【讨论】:

      【解决方案2】:

      你能试试下面的代码,只在你不需要的属性上使用 XmlIgnore 属性吗:-

          [XmlIgnore]
          public int Id { get; set; }
      
          [XmlIgnore]
          public string Name { get; set; }
      
          public double Salary { get; set; }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        • 2014-11-11
        • 2011-01-27
        • 1970-01-01
        • 2014-12-17
        相关资源
        最近更新 更多