2016-04-08 23 views
0

Json'u DataTable'a dönüştürmeye çalışıyorum. JsonArray öğesini DataTable'a dönüştürürken başarıyı buldum. (Aşağıda) bir json dize dönüştürme Ancak:Json dizesini DataTable'a dönüştürme

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'} 

Ben bir hata alıyorum

{ ". DataTable'a okuma Beklenmeyen JSON belirteci StartArray Beklenen, StartObject Yolu '' hattını 1, pozisyon 1. var"}

Kodum basittir:

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

yardımcı olun.

+1

"Beklenen StartArray" fonksiyonu bekliyor ima Tek bir nesnenin aksine bir dizi nesne. – CooncilWorker

+0

Geri döndüğünüz verilere erişiminiz var gibi görünüyor. neden bu verileri içeren bir DataTable'ı seri hale getirmiyorsunuz? – terbubbs

+1

A “DataTable”, burada gösterildiği gibi anahtar/değer çiftlerini içeren nesneler dizisi olarak serileştirir: [Bir DataSet'i Dizine Ekle] (http://www.newtonsoft.com/json/help/html/SerializeDataSet.htm). JSON'nuz tek bir nesnedir. Ne istiyorsun - tek satırda 'DataTable'? – dbc

cevap

0

Kapsayıcınız JSON konteynır bir nesnedir ({ ve } numaralı kodlar ile çevrili virgülle ayrılmış anahtar/değer çiftlerinin sırasız bir koleksiyonudur). Json.NET, Serialize a DataSet'da gösterildiği gibi, her satır için bir dizi girdisi ile dizisi dizilimi ([ ve ] köşeli parantezlerle çevrili virgülle ayrılmış belirteçlerin düzenli bir topluluğu) olarak DataTable dizisi oluşturur. Yani Aşağıdaki veri tablosunun olarak seriden edilebilir:

[ 
    { 
    "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" 
    } 
] 

Böylece JSON Json.NET tarafından bir DataTable otomatik eşlenemez.

İsterseniz, JSON nesnesini bir satır ile DataTable olarak yeniden birleştirebilirsiniz. Bunu yapmak için, bu yüzden eğer bir dizi yerine bir nesne olmadığını kontrol edin ve, bir ara JToken içine yüklemek bir dizi alanına kaydırmak sonra serisini:

var token = JToken.Parse(r); 

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

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

Teşekkürler ve "[" ve ​​"]" yi ön ve arkaya ekleyebilir ve JArray'ın kendisini kullanarak dönüştürebiliriz, değil mi? –

+0

Hatta JsonConvert.DeserializeObject ("[" + r + "]") bile yapabileceğinizi varsayalım; ancak, r'nin bir dizi veya nesne olup olmadığını kontrol etmek daha güvenli olduğunu düşünmek yerine dizi. – dbc

+0

Evet, bunu kontrol ederek yapıyorum. Bir daha iyilik, json'u ayrıştırmanın bir yolu var mı? Gibi özel karakterler içeren?, #, ... Lütfen yardım edin. –

İlgili konular