如何仅序列化所选属性

时间:2014-08-21 04:50:03

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

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

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

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

  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>

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

    [XmlIgnore]
    public int Id { get; set; }

    [XmlIgnore]
    public string Name { get; set; }

    public double Salary { get; set; }