1

我想问一下我得到的以下行为 - 使用 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

该行于 2012 年 9 月 12 日在 067ce1f62fc6addd3685a2134dd576529db2549f 添加,以删除属性本身的类型。我认为 IsWritingDynamic 之前的值应该在所有属性写入之后恢复,也就是在同一个方法结束之前。谁能证实这一点?

4

0 回答 0