2015-02-17 2 views
0

У меня есть класс со списком данных, как это:Пользовательский формат строки из списка C#

public List<Data> data; 

public class Data { 
    public String KEY; 
    public String VALUE; 
} 

Мой вопрос: Как я могу получить следующий формат строки с данными List<Data>?

{"key1":["value1"],"key2":["value2"]}

Я попытался с Newtonsoft.Json.JsonConvert, но я получаю эту строку:

[{"KEY":"key1","VALUE":"value1"},{"KEY":"key1","VALUE":"value1"}]

+0

'String.Format ("{{\"{0} \ ": [\"{1 } \ "], \" {2} \ ": [\" {3} \ "]}}", key1, value1, key2, value2); ' – chouaib

+0

@chouaib, но является списком, этот список имеет кратные значения и и мне нужно получить все данные, разделенные «,» – Manux22

ответ

2

Если вы хотите легко использовать Json.NET, вам просто нужно конвертировать List<Data> в Dictionary<string, string> первый:

var dict = data.ToDictionary<string, string[]>(d => d.KEY, d => new[] { d.VALUE }); 
JsonConvert.SerializeObject(dict); 
+0

да, но этот возврат «[{« KEY »:« key1 »,« VALUE »:« value1 »}, {« KEY »:« key1 »,« VALUE », : "value1"}] 'и мне нужно получить' {"key1": ["value1"], "key2": ["value2"]} ' – Manux22

+0

Преобразование в словарь сначала должно помешать этому (сериализация словаря должна создать один объект JSON). –

+0

@JustinNiessner, на самом деле это должно быть 'data.ToDictionary (d => d.KEY, d => new [] {d.VALUE})' для получения желаемого результата. –

0

это применение «чтобы люди остроумие h молоток, каждая проблема выглядит как гвоздь "! искренне, ответ Джастина наиболее подходит, но я не возражаю представить эту работу. (PS: не тестировалось это может потребоваться устранение неисправностей)

private string convertToJSON(list<Data> data) 
{ 
    StringBuilder sb = new StringBuilder(); 
    string str; 
    int i=0; 

    sb.Append("{"); // start 
    for(i=0; i<data.Count-1; i++) 
    { 
    // add each pair of data with a comma 
    str = String.Format("\"{0}\":[\"{1}\"], ", data[i].key, data[i].value); 
    sb.Append(str); 
    } 

    // add the last pair of data 
    sb.Append("\"{0}\":[\"{1}\"]", data[i+1].key, data[i+1].value); 
    sb.Append("}"); // close the sequence 

    string Result = sb.ToString(); // resulting string 
    return Result; 
} 

Тогда просто назвать это как этот string json = convertToJSON(data);

+0

Спасибо, но это решение является «агрессивным», сначала я пытаюсь с кодом Justin – Manux22

+0

определенно должен «согласиться» с ответом Justin, но нет, это не * агрессивно * xD это просто не * подходящий * ответ – chouaib

+0

, но не это медленнее? – Manux22

Смежные вопросы