在C#中,我想用下面的格式创建JSON字符串或对象:
{
"retailer_br_id" : "5473182",
"retailer_external_id": "",
"erp_invoice_number" : "INV-202302",
"invoice_date": "2023-04-06T17:00:00.000Z",
"status" : 1,
"details":[{
"sku_external_id": "TD5015151432201",
"quantity" : "2",
"price_per_item": "14.5"
},
{
"sku_external_id": "000005020170898446",
"quantity" : 1,
"price_per_item": 10.50
}
]
}
我尝试了以下方法,但似乎不起作用,它只给我dList值.......................................................................................................................................................................................................................................
DataTable dt = new DataTable("Details");
dt.Columns.Add("sku_external_id", typeof(string));
//Data
dt.Rows.Add("0000000000");
dt.Rows.Add("111111111");
dt.Rows.Add("1222222222");
dt.Rows.Add("3333333333");
Root rt = new Root();
rt.retailer_br_id = "32423432432424";
rt.retailer_external_id = "";
rt.erp_invoice_number = "PBY-202304";
DateTime d = DateTime.Now;
string dateString = d.ToString("Y-m-d H:i:s");
rt.invoice_date = dateString;
List<Detail> dList = new List<Detail>();
for (int i = 0; i < dt.Rows.Count; i++)
{
Detail det = new Detail();
det.sku_external_id = (string)dt.Rows[i]["sku_external_id"];
dList.Add(det);
}
string json = JsonConvert.SerializeObject(dList, Formatting.Indented);
textBox1.Text = json;
3条答案
按热度按时间06odsfpq1#
1.您正在序列化
dList
,但不是root
,这就是为什么它显示序列化的dList
。1.缺少将
dList
分配给rt.details
。1.要将日期序列化为ISO 8601格式,请执行以下操作:
备选方案
1.不使用
foreach
循环迭代并将项添加到dList
中,您可以使用以下方式实现:1.将属性命名为Pascal Case,并使用
JsonProperty
属性定义序列化和反序列化中使用的属性名称。1.将
invoice_date
属性更改为DateTime
类型,以便它将序列化并显示ISO 8601中的格式,而不是手动定义格式。nhaq1z212#
json将只有dList的值,因为您还没有将
rt
分配给det
对象。我假设det
有一个属性,可以用rt的值赋值,例如:如果
det
没有root类型属性,则需要添加一个。您可能不希望将
root
分配给列表中det
的每个示例。如果你想在列表外分配它,那么你需要一个 Package 器对象。修改后的代码看起来像...
jdgnovmf3#
你可以使用匿名类型
现在,如果你愿意,你可以使用这个链接将这个JSON在线转换为C#类,例如https://json2csharp.com/