【问题标题】:Add variable to json string in c#在c#中将变量添加到json字符串
【发布时间】:2021-09-16 01:53:40
【问题描述】:
【问题讨论】:
-
您需要提供minimal reproducible example。你说“但是当我打印出 orgChartData”但你的代码没有这样做。
-
使用Json.NET,您可以使用以下单行代码:JsonConvert.SerializeObject(new { fields = new { ID, = ID, DeviceName = deviceName}})。还是我错过了什么?
标签:
c#
json
serialization
【解决方案1】:
你的问题不够清楚。但如果我理解正确,你想转换这个 json
{
"fields":{
"ID": ID,
"Device Name": deviceName
}
}
变成字符串。
强烈建议你使用序列化库,不要自己写json。您可以轻松地创建一个类或字典并将其序列化为该 json。
但是如果你坚持你的 json 字符串中有两个错误。
1- 在 deviceName 之后,您使用 ' 而不是 "。
2- 你在最后一个} 之前添加了额外的"。
所以正确的json应该是这样的
string addItemJsonString = "{\"fields\":{\"ID\":\"" + ID + "\",\"DeviceName\":\"" + deviceName + "\"}}";
【解决方案2】:
使用插值
$"{{\"fields\":{{\"ID\":\"{ID}\",\"DeviceName\":\"{deviceName}\"}}}}";
但最好创建一个 DTO 类并将其序列化为 JSON。
public class MyDto
{
[JsonProperty("fields")]
public FieldDto Fields { get; set; }
}
public class FieldDto
{
[JsonProperty("ID")]
public int Id { get; set; }
[JsonProperty("Device name")]
public string DeviceName { get; set; }
}
public static Main(string[] args)
{
int id = 1;
string deviceName = "Phone";
var blee = new MyDto
{
Fields = new FieldDto
{
Id = id,
DeviceName = deviceName
}
}
string json = JsonConvert.SerializeObject(blee);
}
对于序列化使用 Newtonsoft 库
https://www.newtonsoft.com/json/help/html/SerializeWithJsonConverters.htm
【解决方案3】:
您似乎在询问有关在 C# 中格式化 json 的问题。
- 使用
Newtonsoft.Json 序列化程序和匿名对象(方便且推荐,因为更通用且不易出错)
using Newtonsoft.Json;
var obj = new { fields = new { ID = ID, DeviceName = deviceName } };
string jsonString = JsonConvert.SerializeObject(obj);
- 直接字符串操作(您需要自己处理 json 格式!)。例如。字符串必须始终封装在双引号中,如果它存在于其值中,则需要确保它们被转义
Debug.Assert(!ID.Contains('"'));
Debug.Assert(!deviceName.Contains('"'));
string addItemJsonString = $"{{\"fields\":{{\"ID\":\"{ID}\",\"DeviceName\":\"{deviceName}\"}}\"}}";