C#:asp.net 3.5:反序列化JSON - 如何获取每个对象字符串?

时间:2012-03-14 17:41:42

标签: c# asp.net 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 个答案:

答案 0 :(得分:5)

  

如果我的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
    );
    }
}

答案 1 :(得分:0)

这是无效的JSON。我认为你要找的是一个JSON数组,它将括号内的整个字符串括起来...... [{&#34; ShiftID&#34;:&#34; 2&#34;,...}, {&#34; ShiftId&#34;:&#34; 3&#34;,...}]