Как правильно говорит Джон Скит, вам нужно будет использовать IXmlSerializable
с XmlSerializer
, если вы не хотите иметь публичное получение / установку свойств, поскольку оно предназначено для работы с частичным доверием. окружение, поэтому не получит доступ к данным, к которым вы не смогли бы получить доступ (в ответ на его последнюю часть - да, некоторые структуры, такие как DateTime
, имеют явную поддержку в этом сериализаторе).
В зависимости от того, что вы пытаетесь достичь, и какой версии .NET вы используете, вы можете рассмотреть возможность использования DataContractSerializer
, который не требует, чтобы все было публично (например, вы могли бы поставить DataMemberAttribute
в частном поле или в собственности с публичным геттером и приватным сеттером). Этот сериализатор дает вам меньше контроля над форматом XML (на самом деле он очень ограничительный - например, он даже не поддерживает атрибуты!), Но несколько быстрее в качестве окупаемости.
(Я долго занимался чем-то, что является комбинацией двух, то есть гибкостью XmlSerializer
с возможностью сериализации частных членов, таких как DataContractSerializer
, но, к сожалению, в настоящее время их нет.)