2016-04-07 25 views
1

既知の最上位スキーマを持つJSONを解析しようとしています。しかし、スキーマの中には、さまざまなタイプのJSONオブジェクトを含むことができる1つのJSONオブジェクトがあります。JSON.Netを使用して、既知のJSON構造内の未知のJSONオブジェクト型のコレクションを解析する方法は?

{ 
    "knownfield1": data, 
    "knownfield2": data, 
    "knownfieldcollection": 
    { 
     "fieldofunknowntype1": "string data", 
     "fieldofunknowntype2": 
     { 
      "subunknownfield1": "string data", 
      "subunknownfield1": null 
     }, 
     "fieldofunknowntype3": null 
    } 
} 

私が知られているフィールドのマッピングを含むオブジェクトをしたいと思いますが、動的に未知のフィールドを読み取ることができます。私はJson.Net JTokenとJObjectで試していましたが、動作させることができませんでした。再帰的なJTokenの例外が発生し続けました。

これについての任意のポインタは素晴らしいでしょう。ありがとうございました。私は取得しています

例外:

Type 'Newtonsoft.Json.Linq.JToken' is a recursive collection data 
contract which is not supported. Consider modifying the definition of 
collection 'Newtonsoft.Json.Linq.JToken' to remove references to itself. 

--edit-- 入力ミスコレクションオブジェクトについては、その固定しました。

+0

私の入力に間違いがあります。私はそれを修正しましょう。 – Thaldin

+0

JObjectの問題点は何ですか? Json.Parseを使用してJSON文字列を解析できます。 – Thomas

+0

私は定義されているすべてのフィールドがあるC#オブジェクトにjsonをシリアル化していません。しかし、私の人生のために、私はC#オブジェクトの内部でプロパティを使用する場合、 "knownfieldcollection"(オブジェクト)を直列化解除することはできません。私は 'public JObject Field {get; set;} 'とJToken自身を参照することに関する再帰例外が発生します。 – Thaldin

答えて

0

優勝者がいます。 DBCは頭の爪に当たった。私はWFCのデシリアライズを残してしまい、問題を引き起こしていました。すぐに、すべてのDataContractコードが完全にクリアされ、すべてのものがJSON.Netタグと呼び出しで置き換えられたことを確認したところ、すばらしく機能しました。

ご協力いただきありがとうございます。

+0

これは本当の質問に対する答えではありません。この回答がそれ自体で耐えることができるように、関連する詳細を編集してください。 –

+0

あなたが正直であることを探しているかどうか不明です。左のWFC DataContractJsonDeserializerコードをJSON.Net解析コードで置き換えたときに、JSON.Netが予想通りに解析されます。 直ちに、JObject型のプロパティを使用するだけで、さまざまな未知の型の子を持つJSONオブジェクトがオブジェクトに完全に解析されました。 – Thaldin

関連する問題