C # Сериализация конкретного свойства вложенного объекта - PullRequest
1 голос
/ 04 апреля 2011

У меня есть ac # объект Person как свойство внутри другого объекта Appointment.Мой объект Person имеет свойства ID, FirstName, LastName.В настоящее время я сериализую встречу в XML, но когда дело доходит до вложенного объекта Person, я бы хотел, чтобы ID был сериализован.Есть ли способ указать это из класса Назначение?

Я просто не могу войти в Person и пометить FirstName и LastName как несериализуемые поля, потому что мне нужно сериализовать person в других случаях в моем решении.

Я надеюсь найти что-тогде я могу иметь это:

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

}

Есть мысли?

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Вы можете сделать так, чтобы Person реализовал IXmlSerializable, чтобы выполнить собственную настраиваемую сериализацию (например, сбросить только идентификатор)

Или вместо этого вы можете реализовать его для своего Назначения, сделав его тривиальным, чтобы выбрать именно те биты, которые вы хотите сериализовать.

Как гибридный вариант, вы можете делегировать реализацию такого настраиваемого сериализатора на вспомогательную структуру , которую вы можете создать, чтобы имитировать точный макет сериализации, который вы хотите иметь. Таким образом, вам не придется иметь дело с деталями и XmlWriter

НТН

1 голос
/ 04 апреля 2011

Вы можете сделать что-то вроде этого:

    public class Appointment
    {
        [XmlIgnore()]
        public Person MyPerson
        {
            get;
            set;
        }

        public int MyPersonId
        {
            get { return MyPerson.Id; }
            set { MyPerson = new Person(value)}
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...