如何仅序列化所选属性

本文关键字:属性 序列化 何仅 | 更新日期: 2023-09-27 18:18:59

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

如果不可能使用序列化,那么还有什么方法可以为只具有选定属性的对象创建xml doc呢?

注意:所有属性必须为public

  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>

如何仅序列化所选属性

您可以使用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;
        }
    }

看到

你可以尝试下面的代码,只是使用XmlIgnore属性的属性,你不需要:-

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