【问题标题】:C# Serialize specific property of nested objectC#序列化嵌套对象的特定属性
【发布时间】:2011-04-03 20:46:32
【问题描述】:

我有一个 c# 对象 Person 作为另一个对象 Appointment 中的属性。我的 Person 对象具有属性 ID、FirstName、LastName。我目前正在将约会序列化为 XML,但是对于嵌套的 Person 对象,我只想序列化 ID。有没有办法从 Appointment 类中指定这个?

我根本无法进入 Person 并将 FirstName 和 LastName 标记为不可序列化的字段,因为我需要在我的解决方案中的其他实例中序列化 person。

我希望能找到一些我可以拥有的东西:

public class Appointment {
     [SerializeProperty("ID")]
     public Person MyPerson {
          get;
          set;
     }

}

有什么想法吗?

【问题讨论】:

    标签: c# serialization object


    【解决方案1】:

    你可以这样做:

        public class Appointment
        {
            [XmlIgnore()]
            public Person MyPerson
            {
                get;
                set;
            }
    
            public int MyPersonId
            {
                get { return MyPerson.Id; }
                set { MyPerson = new Person(value)}
            }
        }
    

    【讨论】:

    • 谢谢。我想这就是我要去做的。我认为如果可以通过属性指定它会很酷,这样您就不必制作单独的属性 - 在这种情况下像 MyPersonId 一样。但它会成功的。谢谢 - 我真的很感激。
    【解决方案2】:

    您可以让 Person 实现 IXmlSerializable 来进行自定义序列化(例如仅转储 ID)

    或者您可以为您的 Appointment 实现它,从而轻松选择您想要序列化的位。

    作为一种混合选项,您可以将此类自定义序列化程序的实现委托给 一个辅助结构,您可以构建该辅助结构来模仿您想要的确切序列化布局。这样,您就不必处理细节和 XmlWriter

    HTH

    【讨论】:

    • 谢谢。我有一个自定义序列化程序。仅转储 ID 的问题是我需要 person 的其他属性在我的解决方案的其他部分中可序列化。谢谢回复。 :-)
    • 所以您可以采用第二种或第三种方法 - 人员通常会完全序列化,但不在 Appointment 内?这有帮助吗?
    • 是的,它有帮助。是的,我可以完全序列化 Person - 没问题。我只是不想在序列化约会对象时保留整个嵌套的 Person 对象。
    猜你喜欢
    • 2019-12-08
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多