C #: asp.net 3.5: десериализация JSON - как получить каждую строку объекта?

я знаю, что есть другие места, которые дают этот ответ, но то, что я пытаюсь достичь, является более сложным, это мой код для десериализации:

это данные JSON для примера:

data = @"{""ShiftID"":""2"",""EmpName"":""dsdsfs""}";

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
List<string> list = new List<string>(values.Keys);
// Loop through list
foreach (string k in list)
{
    System.Diagnostics.Debug.Print("'{0}', '{1}'", k, values[k]);
}

это вернет ShiftID, 2 и EmpName, dsdsfs, как вы знаете, но!

Что произойдет, если моя строка json будет выглядеть следующим образом:

data = @"{""ShiftID"":""2"",""EmpName"":""dsdsfs""},{""ShiftID"":""4"",""EmpName"":""dsdsfd""}";

Спасибо!

Ответы на вопрос(2)

что вы ищете массив JSON, который будет заключать всю строку в скобках ... [{"ShiftID": "2", ...}, {"ShiftId": "3" ,. ..}]

если моя строка JSON будет выглядеть с несколькими значениями

data = @"{""ShiftID"":""2"",""EmpName"":""dsdsfs""}, {""ShiftID"":""4"",""EmpName"":""dsdsfd""}";

Ошибка, потому что это недопустимый JSON. Вы, вероятно, имели в виду:

data = @"[{""ShiftID"":""2"",""EmpName"":""dsdsfs""},{""ShiftID"":""4"",""EmpName"":""dsdsfd""}]";

Теперь вы можете десериализовать в массив словарей:

var values = JsonConvert.DeserializeObject<Dictionary<string, string>[]>(data);
foreach (var element in values)
{
    foreach (var entry in element)
    {
        System.Diagnostics.Debug.Print("'{0}', '{1}'",
            entry.Key,
            entry.Value
        );
    }
}

или, что еще лучше, определите модель для представления ваших сущностей:

public class Employee
{
    public string ShiftID { get; set; }
    public string EmpName { get; set; }
}

а теперь десериализуем в список сотрудников:

var employees = JsonConvert.DeserializeObject<Employee[]>(data);
foreach (var employee in employees)
{
    System.Diagnostics.Debug.Print("'{0}', '{1}'",
        employee.ShiftID,
        employee.EmpName
    );
    }
}
 user18124814 мар. 2012 г., 19:36
Вы профессионал! Спасибо
 Darin Dimitrov14 мар. 2012 г., 21:31
@ user181248, я исправил свой первый код. Так должно бытьforeach (var entry in element) вместоforeach (string entry in element).
 user18124814 мар. 2012 г., 20:19
а также ваш первый код не работает
 user18124814 мар. 2012 г., 20:19
Мне нужно получить значения ShiftID и EmpName, потому что это всегда будет что-то другое
 user18124814 мар. 2012 г., 20:11
Ну, я получаю значения, но не столбцы? у тебя есть идея

Ваш ответ на вопрос