英文:
How to store JSON array of data into C# collection
问题
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);
}
英文:
I have the below Json to my API - can you please suggest me how do I store these json data in to C# List or collection
{
"AccountDetails": [
{
"InNumber": "123453333",
"OutNumber": "125666666"
},
{
"InNumber": "2345543334",
"OutNumber": "4556666667"
},
{
"InNumber": "9793543333",
"OutNumber": "2345543333"
}
]
}
I have tried below , but it snot working , kindly let me know if there is any better performance approach
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);
}
答案1
得分: 2
以下是代码部分的翻译:
这是对我的评论的详细说明。
这里我创建了一个类来保存您的帐户详细信息:
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
语句周围循环)插入到数据库中。您没有显示您的数据库访问代码,所以我无法告诉您。
我可以告诉您的是,除非我正在处理非常古老的代码,否则我几乎不使用DataTable。
由于您似乎非常希望它在一个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);
}
英文:
This is an elaboration of my comment.
Here I create a class to hold your account details:
public class AccountDetail
{
public string InNumber { get; set; }
public string OutNumber { get; set; }
}
But, your JSON data represents an object that has a single property that represents a collection of these, so I need this as well:
public class Account
{
public List<AccountDetail> AccountDetails { get; set; }
}
Now I can deserialize your data into an Account
instance:
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);
}
In a reply comment to my comment, you say " I am able to list the all inNumbers and outnumbers in a list but it's difficult to identify which is InNumber is tagged to Outnumber - can you please help me, how do I display records - such way that both the associated numbers can be easily identified , because at the end I need to to store InNumber and corresponding Outnumber in DB"
I'm not quite following. You have a list of AccountDetail
objects, each of which has an InNumber
/ OutNumber
pair. That's easily inserted into a database using any modern database access mechanism (or, just a loop around an INSERT
statement). You don't show your database access code, so I can't tell you.
What I can tell you is that I nearly never use DataTables unless I'm working on really old code.
Since it appears you really want it in a DataTable
, add this code to the end of Test
(after the line that starts 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);
}
答案2
得分: 1
如果你想要一个 DataTable
DataTable dt = JObject.Parse(jsonString)["AccountDetails"].ToObject
如果你想要一个 List
List
public class AccountDetail
{
public string InNumber { get; set; }
public string OutNumber { get; set; }
}
<details>
<summary>英文:</summary>
if you want a DataTable
DataTable dt = JObject.Parse(jsonString)["AccountDetails"].ToObject<DataTable>();
if you want a List
List<AccountDetail> persons = JObject.Parse(jsonString)["AccountDetails"].ToObject<List<AccountDetail>>();
public class AccountDetail
{
public string InNumber { get; set; }
public string OutNumber { get; set; }
}
</details>
# 答案3
**得分**: 1
你所展示的JSON是一个包含名为AccountDetails的属性的对象,其中包含了你的数组。请注意外部的JSON由{ }括起来,而不是[ ],这就是你看到那个错误的原因。
这是https://stackoverflow.com/questions/45066930/deserialize-json-into-c-sharp-collection的重复问题。
你可以像这样解决它:
[示例代码][1]
或者你可以从JSON对象中解析出集合(下面的答案)
创建一个包含AccountDetails列表的对象
```csharp
public class ListContainingObject
{
public List<Member> AccountDetails;
}
```
将其反序列化为
```csharp
var listcontainingobject = JsonConvert.DeserializeObject<ListContainingObject>(jsontext);
```
[1]: https://dotnetfiddle.net/n15KRR
<details>
<summary>英文:</summary>
The JSON you've shown is an Object with a Property called AccountDetails that contains your array. Note how the outer Json is surrounded by { } and not [ ] which is why you're seeing that error.
This is a duplicate of https://stackoverflow.com/questions/45066930/deserialize-json-into-c-sharp-collection
You could solve that, for instance, like this:
[working example][1]
or you parse the collection out of the JSON Object (the answer below)
Create an object that contains a list of AccountDetails
public class ListContainingObject
{
public List<Member> AccountDetails;
}
deserialize to that
var listcontainingobject = JsonConvert.DeserializeObject<ListContainingObject>(jsontext);
https://dotnetfiddle.net/NXCrDC
[1]: https://dotnetfiddle.net/n15KRR
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论