[{"id":"PROCESS_ROOT_NODE","text":"TEMPLATE - 3333(2)","icon":"fa fa-list fa-color-graylt","li_attr":{"id":"PROCESS_ROOT_NODE","__type":"li_attr:#SomeNamespace.JsonDataContractClasses","class":" ps_node_li "}}]
私はオブジェクトを小さくスリム化しました。 基本的に '__type'が 'id'の前の最初の位置にないとき。デシリアライズするとエラーが発生します。DataContractJsonSerializerのjsonで__typeキーを最初に取得する方法
既知のタイプのすべてのDataContract stuff設定が正しくあります。 私は、コンソールアプリケーションでシリアル化してから、その文字列をdeserializeに戻してテストしたところ、完全に動作します。唯一の違いは、 '__type'の場所です。これは既知のMSの問題です。 文書番号:https://msdn.microsoft.com/en-us/library/bb412170(v=vs.110).aspx
文字列置換を試行します。 DataContractJsonSerializerは '__type'キーが2回あると気にしませんでした。
content = content.Replace("\"li_attr\":{", "\"li_attr\":{\"__type\":\"li_attr:#Payce.Common.AnonymousClasses.JsonDataContractClasses\",");
__typeを最初の位置に移動する最適な方法を探しているだけです。
これは良い解決策です.Json.netの新しいバージョンにアクセスできる場合は、まずそれを試してみてください。残念ながら、バージョン2.0に依存している古いコードがあり、変更によって大きなテストが発生します。 –
実験では、JSONを 'Newtonsoft.Json.Formatting.None'で再初期化する必要があることがわかりました。 '{'と '" __type "'の間に空白があっても、 'DataContractJsonSerializer'は型ヒントの処理に失敗します。 – dbc