2013-05-08 33 views
17

Ben yapıya (I veritabanından değerler alınırken edilecektir) Aşağıdaki ile bir JSON nesnesi gereken bir jQuery eklentisi kullanıyorum:dönmek nasıl JSON nesnesi

public class results 
{ 
    int _id; 
    string _value; 
    string _info; 

    public int id 
    { 
     get 
     { 
      return _id; 
     } 
     set 
     { 
      _id = value; 
     } 
    } 
    public string value 
    { 
     get 
     { 
      return _value; 
     } 
     set 
     { 
      _value = value; 
     } 
    } 
    public string info 
    { 
     get 
     { 
      return _info; 
     } 
     set 
     { 
      _info = value; 
     } 
    } 
} 
: Burada

{ results: [ 
    { id: "1", value: "ABC", info: "ABC" }, 
    { id: "2", value: "JKL", info: "JKL" }, 
    { id: "3", value: "XYZ", info: "XYZ" } 
] } 

benim sınıftır

Bu benim serialize yoludur:

results result = new results(); 
result.id = 1; 
result.value = "ABC"; 
result.info = "ABC"; 
string json = JsonConvert.SerializeObject(result); 

Ama bu yalnızca bir satır döndürür. Birden fazla sonucu iade etmeme yardım edebilir misiniz? Sonucu yukarıda belirtilen biçimde nasıl alabilirim?

+7

Kişisel 'result' değişken tek bir öğe değil, bir koleksiyon. Bir dizi öğeyi istiyorsanız bir koleksiyona ihtiyacınız var. – Oded

+0

Bu bağlantıyı bakabilirsiniz http://stackoverflow.com/questions/6201529/turn-c-sharp-object-into-a-json-string-in-net-4/6201609#6201609 – nercan

+1

http://james.newtonking.com/projects/json/help/index.html?topic=html/SerializingCollections.htm –

cevap

5

Seri hale getirmek için yalnızca bir satırınız var. üzgünüm, ama o Json.NET kullandığını cevapsız: OP'ın orijinal json çıktı üretmesi

** Düzenleme 2 maç için

List<results> resultRows = new List<results> 

resultRows.Add(new results{id = 1, value="ABC", info="ABC"}); 
resultRows.Add(new results{id = 2, value="XYZ", info="XYZ"}); 

string json = JavaScriptSerializer.Serialize(new { results = resultRows}); 
  • Edit: Böyle bir şey deneyin. JavaScriptSerializer Yukarıdaki kodu kullanarak bu sonucu üretir: Her şeyden

    {"results":[{"id":1,"value":"ABC","info":"ABC"},{"id":2,"value":"XYZ","info":"XYZ"}]} 
    
+0

Bu, OP'nin sorduğu şeyi üretmez - bir dizi sonucu değil, tek bir özelliği olan "results" ile bir * nesnesini * oluşturur. –

+0

Bu, OP'nin sorduğu sonucu üretmiyor, nesnesi "results" özelliği ile eksik. – heavyd

+0

OP istediği sonuçlar bozulursa çalışır, ancak kök düğümü sonuç olarak adlandırılır –

24

İlk, no such thing as a JSON object var. Sorunuzda sahip olduğunuz şey, bir JavaScript nesnesi hazırlayıcısıdır (farkla ilgili harika bir tartışma için bkz. here). Burada olsa JSON gereken şey seri hakkında gitmek nasıl:

Ben senin results tipi doldurulmuş bir anonim tür kullanırsınız

: Ayrıca

string json = JsonConvert.SerializeObject(new 
{ 
    results = new List<Result>() 
    { 
     new Result { id = 1, value = "ABC", info = "ABC" }, 
     new Result { id = 2, value = "JKL", info = "JKL" } 
    } 
}); 

oluşturulan JSON sonuç öğeleri ile dikkat: Dizeler yerine Number türünde id s. Bu bir sorun olacağını şüpheliyim, ama C# idstring türünü değiştirmek için yeterince kolay olurdu.

Ben de senin results tipini çimdik istiyorum ve destek alanları kurtulmak:

public class Result 
{ 
    public int id { get ;set; } 
    public string value { get; set; } 
    public string info { get; set; } 
} 

Dahası, sınıflar geleneksel PascalCased değil camelCased bulunmaktadır.

İşte yukarıdaki koddan üretilen JSON var:

{ 
    "results": [ 
    { 
     "id": 1, 
     "value": "ABC", 
     "info": "ABC" 
    }, 
    { 
     "id": 2, 
     "value": "JKL", 
     "info": "JKL" 
    } 
    ] 
} 
+0

Kimliklerimi 'int' olarak ya da kod içinde anlam ifade etmek isterim; Javascript genellikle her iki şekilde de iyi işleyebilir, bu sayede güçlü yazımdan yararlanabilirsiniz. Transit için dizeler olması gerekiyorsa her zaman .ToString() vardır. – anaximander

+1

@anaximander: Bu doğru. Şahsen ben de tercih ederim. Onu değiştireceğim ve not alacağım. Geri dönüşünüz için teşekkür ederiz! –

+0

@AndrewWhitaker: Gönderdiğiniz kod derlenmiyor. "Tip beklenen", "; beklenen", "geçersiz ifade terimi", "", "ifadesinin yeni bir ifade() veya [] sonra yazılması" ve "geçersiz ifade terimi()" – user1640256