将JSON输出转换为C#List

时间:2017-08-03 15:25:47

标签: c# json visual-studio

我将一些JSON数据作为一个字符串看起来像(从VS文本可视化工具中复制和粘贴):

{
   "error":0,
   "result":{
      "name":"wjetestuser1",
      "id":"0eu0_User_2_0b4cfb616e648d4792056c1a6e7d801e_null",
      "status":"ACTIVE"
   }
}
{
   "match":[
      [
         "domain.id",
         "=",
         "2"
      ],
      [
         "loginName",
         "=",
         "wjetestuser1"
      ]
   ],
   "return":[
      "name",
      "id",
      "status"
   ]
}

我试图将此转换为"result":之后和{"match":之前的所有内容的列表,而不使用替换命令,因此我最终得到的列表看起来很像类似的东西:

Name, wjetestuser1
id, 0eu0_User_2_0b4cfb616e648d4792056c1a6e7d801e_null
status, ACTIVE

如果我能够获得错误代码状态,那就是奖金,但实际上并不需要。

我希望有一个简单的(或几个衬垫)不会涉及使用替换正则表达式命令将字符串分开。

到目前为止,各种代码都尝试了,但如果我之前删除"result":以及之后包括{"match":

,这对我有用。 下面的

是上面的输出作为单行

s = commonCode.ExeApiCall(url);
var DSData = new List<KeyValuePair<string, string>>();
var jsonData = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(s);

第3行错误,错误:

  

完成阅读JSON内容后遇到的其他文字:{。路径&#39;&#39;,第1行,第119位。

1 个答案:

答案 0 :(得分:1)

正如Rufo先生在this comment指出的,如果你使用Newtownsoft图书馆,你可以Read Multiple Fragments With JsonReader。网站上的例子:

public class Role
{
    public string Name { get; set; }
}

public class Main
{
    string json = @"{ 'name': 'Admin' }{ 'name': 'Publisher' }";
    IList<Role> roles = new List<Role>();

    JsonTextReader reader = new JsonTextReader(new StringReader(json));
    reader.SupportMultipleContent = true;

    while (true)
    {
        if (!reader.Read())
            break;

        JsonSerializer serializer = new JsonSerializer();
        Role role = serializer.Deserialize<Role>(reader);
        roles.Add(role);
    }

    foreach (Role role in roles)
        Console.WriteLine(role.Name);
}

我的原始答案是为这种特殊情况制作最小的JSON解析器。 See revision history for that