使用ServiceStack.Text

时间:2015-05-30 17:23:31

标签: c# json servicestack-text servicestack-bsd

我想询问我得到的以下行为 - 无论是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)?
  3. 以上原因是:

    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的先前值。 有人可以确认一下吗?

0 个答案:

没有答案