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

Существует инструмент, называемый генератором таблицы MySQL Pivot, он может помочь вам создать сводную таблицу в Интернете, которую вы можете позже экспортировать в excel (если хотите). он может работать, если ваши данные находятся в одной таблице или в нескольких таблицах.

Все, что вам нужно сделать, это указать источник данных столбцов (он поддерживает динамические столбцы), строки, значения в тело таблицы и таблицы (если они есть) MySQL Pivot Table [/g1]

Главная страница этого инструмента - http://mysqlpivottable.net

1
задан atlanteh 16 April 2015 в 13:42
поделиться

1 ответ

Если вы попытаетесь выполнить сериализацию первой версии TestClass, фоновые поля будут автоматически сериализованы двоичным форматированием. Авто свойства являются только синтаксическим сахаром, компилятор преобразует их в нормальные свойства с полями поддержки. Если вы декомпилируете свое исходное консольное приложение (или библиотеку классов) с помощью ILSpy , например, вы увидите, что ваши частные поля объявлены как:

.field private string '<ItemOne>k__BackingField'

, который отличается от ваше второе объявление с полями поддержки, которое дает:

.field private string _itemOne

. Подход будет объявлять интерфейс ISerializable на вашем TestClass и получить значение исходных свойств, используя информацию, содержащуюся в классе SerializationInfo

[Serializable]
public class TestClass : ISerializable
{
    private string _itemTwo;
    private string _itemOne;

    public String ItemTwo
    {
        get { return _itemTwo; }
        set { _itemTwo = value; }
    }

    public String ItemOne
    {
        get { return _itemOne; }
        set { _itemOne = value; }
    }

    protected TestClass(SerializationInfo info, StreamingContext context)
    {
        _itemTwo = info.GetString("<ItemTwo>k__BackingField");
        _itemOne = info.GetString("<ItemOne>k__BackingField");
    }

    [SecurityPermissionAttribute(SecurityAction.Demand,
    SerializationFormatter = true)]
    public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        //Add data to your serialization process here
    }
}

, поэтому вы указываете BinaryFormatter, как вы хотите, чтобы ваши поддерживающие поля были инициализированы во время десериализации.

4
ответ дан codingadventures 21 August 2018 в 07:05
поделиться
  • 1
    Фантастика!! Оно работает! большое спасибо :) – atlanteh 16 April 2015 в 15:21
  • 2
    Потрясающие! пожалуйста, не забудьте также поднять :-) – codingadventures 16 April 2015 в 15:21
  • 3
    Я думал, что должен быть способ, если вы посмотрите на заднюю часть. черт возьми, чтобы выбраться из пинча – RadioSpace 16 April 2015 в 19:43
Другие вопросы по тегам:

Похожие вопросы: