asp.net 如何将JSON数组数据存储到C#集合中

ugmeyewa  于 2023-10-21  发布在  .NET
关注(0)|答案(3)|浏览(139)

我有下面的JSON到我的API -你能建议我如何将这些JSON数据存储到C#列表或集合中吗

{
  "AccountDetails": [
    {
      "InNumber": "123453333",
      "OutNumber": "125666666"
    },
    {
      "InNumber": "2345543334",
      "OutNumber": "4556666667"
    },
    {
      "InNumber": "9793543333",
      "OutNumber": "2345543333"
    }
  ]
}

我已经尝试了下面,但它鼻涕工作,请让我知道,如果有任何更好的性能方法

var persons = JsonConvert.DeserializeObject<List<Member>>(AccountDetails);

    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("InNumber", typeof(System.String)));
    dt.Columns.Add(new DataColumn("OutNumber", typeof(System.String)));
    

    foreach (var item in persons)
    {
        DataRow dr = dt.NewRow();
        dr["InNumber"] = item.InNumber;
        dr["OutNumber"] = item.OutNumber;

        dt.Rows.Add(dr);
    }
j2datikz

j2datikz1#

这是对我的评论的阐述。
我在这里创建了一个类来保存您的帐户详细信息:

public class AccountDetail
{
    public string InNumber { get; set; }
    public string OutNumber { get; set; }
}

但是,你的JSON数据代表一个对象,它有一个属性,这个属性代表这些的集合,所以我也需要这个:

public class Account
{
    public List<AccountDetail> AccountDetails { get; set; }
}

现在我可以将您的数据存储到Account示例中:

public static void Test()
{
    const string data = @"
         {
          ""AccountDetails"": [
            {
                ""InNumber"": ""123453333"",
                ""OutNumber"": ""125666666""
            },
            {
                ""InNumber"": ""2345543334"",
                ""OutNumber"": ""4556666667""
            },
            {
                ""InNumber"": ""9793543333"",
                ""OutNumber"": ""2345543333""
            }
          ]
        }";
    var result = JsonConvert.DeserializeObject<Account>(data);
}

在回复我的评论时,你说:
我可以在列表中列出所有inNumber和outnumber,但很难确定哪个InNumber标记为Outnumber。我如何显示记录-这样的方式,这两个相关的号码可以很容易地识别,因为在结束时,我需要存储在数据库中的InNumber和相应的Outnumber。
我不太明白。您有一个AccountDetail对象列表,每个对象都有一个InNumber/OutNumber对。可以使用任何现代数据库访问机制(或者,只是围绕INSERT语句的循环)轻松地将其插入数据库。你没有显示你的数据库访问代码,所以我不能告诉你。
我可以告诉你的是,我几乎从不使用DataTables,除非我正在处理 * 非常 * 旧的代码。
因为看起来你真的想把它放在DataTable中,所以把这段代码添加到Test的末尾(在var result =开始的那一行之后):

DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("InNumber", typeof(System.String)));
dataTable.Columns.Add(new DataColumn("OutNumber", typeof(System.String)));

foreach (var accountDetail in result.AccountDetails)
{
    DataRow dr = dataTable.NewRow();
    dr["InNumber"] = accountDetail.InNumber;
    dr["OutNumber"] = accountDetail.OutNumber;

    dataTable.Rows.Add(dr);
}
pieyvz9o

pieyvz9o2#

您所展示的JSON是一个Object,它具有名为AccountDetails的Property,其中包含您的数组。注意外部Json是如何被{ }而不是[ ]包围的,这就是为什么你会看到这个错误。
这是Deserialize Json into C# Collection的副本
你可以解决这个问题,例如,像这样:
working example
或者从JSON对象中解析集合(答案如下)
创建包含AccountDetails列表的对象

public class ListContainingObject
{
    public List<Member> AccountDetails;
}

反序列化为

var listcontainingobject = JsonConvert.DeserializeObject<ListContainingObject>(jsontext);

https://dotnetfiddle.net/NXCrDC

ymdaylpp

ymdaylpp3#

如果需要DataTable

DataTable dt = JObject.Parse(jsonString)["AccountDetails"].ToObject<DataTable>();

如果你想列出

List<AccountDetail> persons = JObject.Parse(jsonString)["AccountDetails"].ToObject<List<AccountDetail>>();

public class AccountDetail
{
    public string InNumber { get; set; }
    public string OutNumber { get; set; }
}

相关问题