Неправильная десериализация общего списка с использованием ServiceStack.Text

Я хотел бы спросить, является ли следующее поведение - с v3 (BSD) или v4 - ошибкой.

У меня есть общий список. Я сериализую его, используя myList.ToJson(). В результате я получаю это:

"[{\"__type\":\"MyNameSpace.MyType, MyAssembly\", ... (properties)},
{... (properties)},
{... (properties)},
{... (properties)},
...]"

Таким образом, только первый элемент имеет свой тип. В результате, когда я делаю это:

var deserialised = myList.ToJson().FromJson<List<object>>();

Я получаю список, который имеет в качестве первого элемента MyType и в качестве последующих элементов строки. Я знаю это:

FromJson<List<MyType>>()

работает, но я не знаю тип во время компиляции. У меня есть два вопроса:

  1. Это ошибка?
  2. Если нет, есть ли способ, которым я могу обойти это без накладных расходов динамического анализа (то есть JsConfig.IncludeTypeInfo)?

Причина вышеизложенного:

JsState.IsWritingDynamic = false;

в:

        if (WriteTypeInfo != null || JsState.IsWritingDynamic)
        {
            if (JsConfig.PreferInterfaces && TryWriteSelfType(writer)) i++;
            else if (TryWriteTypeInfo(writer, value)) i++;
            JsState.IsWritingDynamic = false;
        }

в:

WriteType<T, TSerializer>.WriteProperties

Эта строка была добавлена ​​в 067ce1f62fc6addd3685a2134dd576529db2549f 9.12.2012, чтобы удалить сами типы свойств. Я думаю, что предыдущее значение IsWritingDynamic должно быть восстановлено после записи всех свойств, то есть до конца этого же метода. Может ли кто-нибудь подтвердить это?

0 ответов

Другие вопросы по тегам