我是json的新手。我需要不同用户的信息,并将它们添加到c#(.net开发)中的 dataGridView 或 dataTable 或 dataSet 中。信息示例为(json有效):
{
"JrPwbApfIHbQhCUmVIoiVJcPYv93": {
"address": "Jessore",
"name": "Dev"
},
"iBRZAyn8TQTOgKTcByGOvJjL9ZB3": {
"address": "Bogra",
"name": "Kumar Saikat"
}
}
我想要他们这样:
User1 |杰索尔|开发人员
User2 |博格拉|库玛·赛卡特(Kumar Saikat)
即使我列出所有清单也将有所帮助。
我相信我可以通过
反序列化它们(完全不确定)
var model = JsonConvert.DeserializeObject<user>(json);
其中用户是类。
public class Item
{
public string name;
public string address;
}
来自this question-answer。如果属性已知,我可以从this tutorial获取值。但是在我的情况下,我的属性是未知的((字符串“ User1”,“ User2”是随机的,因为我将从数据库中获取它们)。在此问题上的任何帮助和帮助将不胜感激。先感谢您。
答案 0 :(得分:6)
您正在查看JSON字典,因此只需将其反序列化即可:
public static Dictionary<string,Item> ParseJson(string source)
{
return JsonConvert.DeserializeObject<Dictionary<string,Item>>(source);
}
如果您这样称呼它:
public static void Main()
{
var input = @"{'JrPwbApfIHbQhCUmVIoiVJcPYv93': {'address': 'Jessore','name': 'Dev' }, 'iBRZAyn8TQTOgKTcByGOvJjL9ZB3': {'address': 'Bogra','name': 'Kumar Saikat'}}";
var result = ParseJson(input);
foreach (var r in result)
{
Console.WriteLine("Key={0};Name={1};Address={2}", r.Key, r.Value.name, r.Value.address);
}
}
输出为:
Key=JrPwbApfIHbQhCUmVIoiVJcPYv93;Name=Dev;Address=Jessore
Key=iBRZAyn8TQTOgKTcByGOvJjL9ZB3;Name=Kumar Saikat;Address=Bogra
此示例将列表转储到控制台,但是您可以轻松地修改for
循环以添加到列表中。
在DotNetFiddle上查看我的示例
答案 1 :(得分:0)
可以使用nuget包Newtonsoft.Json。这段代码为您提供了您想要的东西:
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
var json =
"{\"JrPwbApfIHbQhCUmVIoiVJcPYv93\":{\"address\":\"Jessore\",\"name\":\"Dev\"}," +
"\"iBRZAyn8TQTOgKTcByGOvJjL9ZB3\":{\"address\":\"Bogra\",\"name\":\"Kumar Saikat\"}}";
var o = JsonConvert.DeserializeObject(json);
var items = new List<Item>();
foreach (dynamic x in o as IEnumerable)
{
var i = new Item();
var y = x.First;
i.Name = y.name.Value;
i.Address = y.address.Value;
items.Add(i);
}
}
public class Item
{
public string Name { get; set; }
public string Address { get; set; }
}
}
}
您的情况有点奇怪,因为这些自动创建的名称例如 “ JrPwbApfIHbQhCUmVIoiVJcPYv93”,否则比较容易,但是应该是相当容易的代码。
请记住,我在此处使用“动态”功能,这意味着在运行时出现问题,而不是在设计时遇到问题,因为未对其进行检查。
答案 2 :(得分:0)
反序列化的正确方法如下所示
var model = JsonConvert.DeserializeObject<Dictionary<string, Item>>(data);
在您发布的代码示例中,您的“ 用户”类名称为“ 项目”,但是您尝试使用“ 用户”进行反序列化在您的代码中。另外请注意,您不能直接将数据反序列化为用户列表,因为它以某些随机字符串的值形式出现。
var model = JsonConvert.DeserializeObject<user>(json);
为使您的代码正确反序列化,您的json格式应如下:
{
{
"address": "Jessore",
"name": "Dev"
},
{
"address": "Bogra",
"name": "Kumar Saikat"
}
}