2013-05-08 23 views
17

Używam plugin jQuery, które potrzebują obiektu JSON z następującą strukturę (będę pobierania wartości z bazy danych):Jak powrócić JSON obiekt

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

Oto moja klasa:

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

to jest droga ja szeregować go:

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

Ale to powróci tylko jeden wiersz. Czy możesz mi pomóc w zwrocie więcej niż jednego wyniku? Jak mogę uzyskać wynik w formacie określonym powyżej?

+7

zmiennej result' 'to pojedynczy egzemplarz, a nie zbiór. Potrzebujesz kolekcji, jeśli chcesz mieć szereg przedmiotów. – Oded

+0

możesz obejrzeć ten link: 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 –

Odpowiedz

5

Masz tylko jeden wiersz do serializacji. Spróbuj czegoś takiego:

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}); 
  • Edycja dopasować oryginalną moc JSON OP

** edit 2: przepraszam, ale brakowało mi, że używał Json.NET. Korzystanie JavaScriptSerializer powyższy kod ten produkuje ten wynik:

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

Nie wygeneruje to, czego żąda OP - generuje * obiekt * z pojedynczą właściwością 'wyniki', a nie tablicą wyników. –

+0

To nie powoduje wyniku, o który prosił OP, brakuje jego obiektu z właściwością 'wyniki'. – heavyd

+0

To by działało, gdyby OP chciał złamać wyniki, ale jego węzeł główny jest nazywany wynikami –

24

Przede wszystkim, nie no such thing as a JSON object. To, co masz w swoim pytaniu, to literalny obiekt JavaScript (zobacz here, aby uzyskać wspaniałą dyskusję na temat różnicy). Oto w jaki sposób możesz przejść o szeregowania co masz do JSON jednak:

użyłbym anonimowy typ wypełnioną typu results:

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" } 
    } 
}); 

Należy również pamiętać, że wygenerowany JSON ma pozycje wynikowe z id s typu Number zamiast ciągów. Wątpię, żeby to był problem, ale łatwo byłoby zmienić typ id na string w C#.

Chciałbym również dostosować swój typ results i pozbyć pól Podłoże:

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

Ponadto zajęcia tradycyjnie są PascalCased i nie camelCased.

Oto wygenerowany JSON z powyższym kodzie:

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

Pozostawiłbym identyfikatory jako 'int' lub cokolwiek innego ma sens w kodzie; JavaScript zazwyczaj radzi sobie z nimi w porządku tak czy inaczej, więc równie dobrze możesz skorzystać z silnego pisania, póki możesz. Zawsze istnieje '.ToString()', jeśli muszą być ciągami tranzytowymi. – anaximander

+1

@anaximander: To prawda. Wolałbym też "int" osobiście. Oddam to z powrotem i zanotuję. Dzięki za opinie! –

+0

@AndrewWhitaker: Kod, który wysłałeś, po prostu się nie kompiluje. Daje błędy jako "Typ oczekiwany", "oczekiwany", "nieważne wyrażenie wyrażenie", "", "nowe wyrażenie wymaga() lub [] po typie" i "nieprawidłowe wyrażenie wyrażenie()" – user1640256