десериализация универсального списка возвращает пустой указатель

Из «Обработка ошибок PL / SQL» :

NO_DATA_FOUND

Инструкция SELECT INTO не возвращает строк или ваша программа ссылается на удаленный элемент во вложенной таблице или неинициализированный элемент в таблице index-by. Агрегатные функции SQL, такие как AVG и SUM, всегда возвращают значение или ноль. Таким образом, оператор SELECT INTO, который вызывает агрегатную функцию, никогда не вызывает NO_DATA_FOUND. Ожидается, что оператор FETCH в конечном итоге не будет возвращать никаких строк, поэтому, когда это происходит, исключение не возникает.

blockquote>

Вы не используете оператор, который вызвал бы исключение NO_DATA_FOUND.

Может быть, вы можете использовать SQL%ROWCOUNT. Из «Выполнение операций SQL из PL / SQL» :

Чтобы узнать, на сколько строк влияют операторы DML, вы можете проверить значение SQL%ROWCOUNT ...

blockquote>
CREATE OR REPLACE PROCEDURE UPD_JOB (p_job_id jobs.job_id%TYPE,
                                     p_jobnew jobs.job_title%TYPE)
IS
BEGIN
  UPDATE JOBS
         SET job_title = p_jobnew
         WHERE JOB_ID = p_job_id;

  IF SQL%ROWCOUNT = 0 THEN
    DBMS_OUTPUT.PUT_LINE('No rows have been updated');
  END IF;
END;
/

5
задан Agnel Kurian 9 July 2009 в 06:03
поделиться

1 ответ

Хорошо список всегда пуст для начала, Вы устанавливающий его через myClass.value = new List<...>(); ? Также Вы сохранили сериализированные данные и в двоичном файле и в xml форматах, таким образом, можно проверить, что данные на самом деле сохраняются?

Просто примечание также, если Вы используете 2.0 +, Вы не должны реализовывать ISerializable, если Вы не должны управлять абсолютной сериализацией, можно изменить значение на общественную собственность, и это сериализирует на своем собственном.

Править: Следующий случай, кажется, сериализирует и десериализовывает прекрасный для меня, я отправляю, это упаковывает, я неправильно понимаю вопрос в целом.

При игнорировании противного тестового кода надо надеяться, это помогает немногому.

    [Serializable]
    public class OType
    {
        public int SomeIdentifier { get; set; }
        public string SomeData { get; set; }

        public override string ToString()
        {
            return string.Format("{0}: {1}", SomeIdentifier, SomeData);
        }
    }

    [Serializable]
    public class MyClass : ISerializable
    {
        public List<OType> Value;

        public MyClass() {  }

        public MyClass(SerializationInfo info, StreamingContext context)
        {
            this.Value = (List<OType>)info.GetValue("value", typeof(List<OType>));
        }

        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("value", Value, typeof(List<OType>));
        }
    }

...

        var x = new MyClass();

        x.Value = new OType[] { new OType { SomeIdentifier = 1, SomeData = "Hello" }, new OType { SomeIdentifier = 2, SomeData = "World" } }.ToList();

        var xSerialized = serialize(x);

        Console.WriteLine("Serialized object is {0}bytes", xSerialized.Length);

        var xDeserialized = deserialize<MyClass>(xSerialized);

        Console.WriteLine("{0} {1}", xDeserialized.Value[0], xDeserialized.Value[1]);

Забыл вывод..

Сериализованный объект составляет 754 байта

1: Привет 2:В мире

3
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

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