【问题标题】:Add variable to json string in c#在c#中将变量添加到json字符串
【发布时间】:2021-09-16 01:53:40
【问题描述】:

我正在尝试调用图形 api,需要一些帮助来检查这个

string addItemJsonString = "{\"fields\":{\"ID\":\"" + ID + "\",\"DeviceName\":\"" + deviceName + "'}\"}";

这是我的json,我需要将它们转换成字符串

{
   "fields":{
      "ID": ID,
      "Device Name": deviceName
   }
}

图形 API:https://docs.microsoft.com/en-us/graph/api/listitem-create?view=graph-rest-1.0&tabs=csharp

【问题讨论】:

  • 您需要提供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 的问题。

      1. 使用Newtonsoft.Json 序列化程序和匿名对象(方便且推荐,因为更通用且不易出错)
      using Newtonsoft.Json;
      
      var obj = new { fields = new { ID = ID, DeviceName = deviceName } };
      string jsonString = JsonConvert.SerializeObject(obj);
      
      1. 直接字符串操作(您需要自己处理 json 格式!)。例如。字符串必须始终封装在双引号中,如果它存在于其值中,则需要确保它们被转义
      Debug.Assert(!ID.Contains('"'));
      Debug.Assert(!deviceName.Contains('"'));
      string addItemJsonString = $"{{\"fields\":{{\"ID\":\"{ID}\",\"DeviceName\":\"{deviceName}\"}}\"}}";
      

      【讨论】:

        猜你喜欢
        • 2021-03-15
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多