Неправильная десериализация общего списка с использованием 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>>()
работает, но я не знаю тип во время компиляции. У меня есть два вопроса:
- Это ошибка?
- Если нет, есть ли способ, которым я могу обойти это без накладных расходов динамического анализа (то есть 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 должно быть восстановлено после записи всех свойств, то есть до конца этого же метода. Может ли кто-нибудь подтвердить это?