[{"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 "}}]
J'ai réduit l'objet en bas. Fondamentalement, lorsque le «__type» n'est pas dans la première position, avant «id». La désérialisation va lancer une erreur.Comment faire en sorte que la clé __type dans json soit la première pour DataContractJsonSerializer
J'ai tout le contenu de DataContract configuré correctement, avec des types connus. J'ai testé dans une application de console, en sérialisant, puis en reprenant cette chaîne à travers la désérialisation et cela fonctionne parfaitement. La seule différence est l'emplacement du '__type'. Ceci est un problème MS connu. Documenté à https://msdn.microsoft.com/en-us/library/bb412170(v=vs.110).aspx
Essayé un remplacement de chaîne, qui fonctionne. et le DataContractJsonSerializer ne se souciait pas si la clé '__type' était là deux fois. Nous cherchons simplement le meilleur moyen de déplacer le __type à la première position.
Ceci est une bonne solution, et d'autres devraient l'essayer en premier, si vous avez accès à la nouvelle version de json.net. Malheureusement, nous avons un ancien code qui repose sur la version 2.0, et le changement entraînerait des tests majeurs. –
Par expérience, j'ai trouvé que le JSON doit être reserialized avec 'Newtonsoft.Json.Formatting.None'. Même si vous avez un espace entre le '{' et le '' __type "', DataContractJsonSerializer' échouera à traiter l'indication de type. – dbc