我想询问我得到的以下行为 - 无论是v3(BSD)还是v4 - 是一个错误。
我有一个通用列表。我使用myList.ToJson()将其序列化。结果我得到了这个:
"[{\"__type\":\"MyNameSpace.MyType, MyAssembly\", ... (properties)},
{... (properties)},
{... (properties)},
{... (properties)},
...]"
也就是说,只有第一个元素的类型被写入。结果,当我这样做时:
var deserialised = myList.ToJson().FromJson<List<object>>();
我得到一个列表,其第一个元素是MyType,后续元素是字符串。我知道:
FromJson<List<MyType>>()
有效,但我不知道编译时的类型。我有两个问题:
以上原因是:
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年12月9日在067ce1f62fc6addd3685a2134dd576529db2549f添加,以删除属性类型本身。我认为在写入所有属性之后,即在同一方法结束之前,应该恢复IsWritingDynamic的先前值。 有人可以确认一下吗?