Свойство с частным полем не десериализуется?

Когда я пишу такой класс, он отлично сериализуется/десериализуется.

[Serializable]
public class Post
{
    public string Subject { get; set; }
}

Однако, когда я использую приватное поле, десериализация существующих данных завершается ошибкой. Следующий класс больше не десериализует тему

[Serializable]
public class Post
{
    private string subj;
    public string Subject { get { return subj; } set { subj = value; } }
} 

Я использую следующий фрагмент кода

var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bformatter.Serialize(stream, posts); 

и наоборот.

Кто-нибудь может объяснить, почему это происходит?


person Marlon    schedule 03.04.2018    source источник
comment
Как вы сериализуете и как вы десериализуете?   -  person Camilo Terevinto    schedule 04.04.2018
comment
Какой сериализатор вы используете? это случайно не BinaryFormatter? Вы изменили имя поля и/или изменили поле+свойство на автоматически реализуемое-свойство (то, что показано в первом примере). Также: не используйте BinaryFormatter. Как обычно   -  person Marc Gravell    schedule 04.04.2018
comment
comment
@CamiloTerevinto - я использую следующий фрагмент кода var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); bformatter.Serialize (поток, сообщения); и наоборот.   -  person Marlon    schedule 04.04.2018
comment
Тогда следуйте совету @MarcGravell и не используйте BinaryFormatter. Обычно NewtonSoft.Json — лучший вариант.   -  person Camilo Terevinto    schedule 04.04.2018
comment
@MarcGravell - да, я использую BinaryFormatter, да, я изменил поле с поля с get/set на поле с get/set и приватное поле, но я не изменил имя поля. Кроме того, что не так с BinaryFormatter?   -  person Marlon    schedule 04.04.2018
comment
@CamiloTerevinto - я использовал BinaryFormatter, потому что мне не кажется логичным хранить сотни мегабайт данных в XML. Не добавят ли XML или JSON слишком много накладных расходов (в тегах и т. д.) к уже большим файлам данных?   -  person Marlon    schedule 04.04.2018
comment
@VijunavVastivch - спасибо, я проверю эти ссылки как можно скорее!   -  person Marlon    schedule 04.04.2018
comment
Для этих случаев у вас есть отличная библиотека Marc Protobuf.NET: github.com/mgravell/protobuf-net   -  person Camilo Terevinto    schedule 04.04.2018
comment
Взгляните на Binary Formatter и свойства с\без резервных полей, которые, я думаю, объясняют вашу проблему и дают возможный обходной путь. (На самом деле это может быть дубликат; согласны?) Но было бы лучше, если бы вы не использовали BinaryFormatter, как рекомендуют другие.   -  person dbc    schedule 04.04.2018
comment
@Marlon - вы спросили: Кроме того, что не так с BinaryFormatter? См. Каковы недостатки встроенного в сериализации .Net на основе BinaryFormatter?   -  person dbc    schedule 04.04.2018
comment
@Марлон, действительно, переход от ручного поля к автопропу нарушит предположения BinaryFormatter   -  person Marc Gravell    schedule 04.04.2018
comment
Спасибо за ответы на все вопросы! Теперь я понимаю, где я ошибся (а также почему BinaryFormatter не является идеальным выбором).   -  person Marlon    schedule 04.04.2018