2016-04-08 26 views
0

JsonをDataTableに変換しようとしています。 jsonArrayをDataTableに変換すると成功しました。 (下)JSON文字列に変換するときしかし:Json文字列をDataTableに変換します。

var r = {'ASSOCIATION_ID':61.0,'DESCRIPTION':'fssESTf64 - false','ACTIVE':true,'MODEL_TYPE':'0','SEARCH_TYPE':'false','CREATED_BY':'1090323','CREATED_DATE':'2015-09-17T14:41:20','LAST_UPDATED_BY':'1090323','LAST_UPDATED_DATE':'2016-02-26T15:55:54'} 

Iのようにエラーを取得

{ "データテーブルを読み出す際に予期しないJSONトークン期待StartArray、StartObjectパス '、行1、位置1を得ました"}

私のコードは単純です:

DataTable a = JsonConvert.DeserializeObject<DataTable>(r); 

アシストしてください。

+1

を「期待StartArray」機能が期待されていることを意味する:それは、オブジェクトの代わりに、配列だし、そうであれば、配列にそれをラップし、デシリアライズがあれば、中間JTokenにロードし、それを行うには、チェック単一のオブジェクトではなくオブジェクトの配列。 – CooncilWorker

+0

あなたが戻ってくるデータにアクセスできるようです。なぜこのデータを含むDataTableをシリアル化しないのですか? – terbubbs

+1

'DataTable'は、以下に示すように、キーと値のペアを含むオブジェクトの配列としてシリアル化します:[Serialize a DataSet](http://www.newtonsoft.com/json/help/html/SerializeDataSet.htm)。 JSONは単一のオブジェクトです。あなたは何を望みますか?1行の 'DataTable'ですか? – dbc

答えて

0

ルートJSONコンテナは、オブジェクト(中括弧で囲まれたコンマで区切られたキーと値のペアの順序付けられていない集合 - {})です。 Json.NETはをの配列(角括弧で囲まれたコンマ区切りのトークンのコレクション)としてシリアル化し、Serialize a DataSetに示すように、各行に対して1つの配列エントリを持ちます。私。次は、データテーブルとして非直列化することができます。

[ 
    { 
    "ASSOCIATION_ID": 61.0, 
    "DESCRIPTION": "fssESTf64 - false", 
    "ACTIVE": true, 
    "MODEL_TYPE": "0", 
    "SEARCH_TYPE": "false", 
    "CREATED_BY": "1090323", 
    "CREATED_DATE": "2015-09-17T14:41:20", 
    "LAST_UPDATED_BY": "1090323", 
    "LAST_UPDATED_DATE": "2016-02-26T15:55:54" 
    } 
] 

したがって、あなたのJSONはJson.NETによってDataTableに自動的にマッピングすることはできません。

必要に応じて、JSONオブジェクトを1行でDataTableとしてデシリアライズすることができます。

var token = JToken.Parse(r); 

if (token.Type == JTokenType.Object) 
    token = new JArray(token); 

var a = token.ToObject<DataTable>(); 
+0

ありがとう、 "["と "]"を前後に追加して、JArray自体を使って変換できますか? –

+0

'JsonConvert.DeserializeObject (" [+ r + "]"); 'でも' 'r''が配列やオブジェクトではないと仮定するのではなく、アレイ。 – dbc

+0

ええ、私はそれをチェックしています。もう一つの賛成です、?、#、...のような特殊文字を含むjsonを解析する方法はありますか?助けてください。 –

関連する問題