【问题标题】:json string creation with c#用c#创建json字符串
【发布时间】:2017-12-20 23:44:14
【问题描述】:

我正在创建一个字符串变量以在休息后调用中使用,但它失败了。当我调试并查看 json 值时,我被告知它不是 json 格式。它确实似乎是键:值对,所以我不确定这里的问题是什么?

我还尝试使用 \ 来转义“而不是双单引号”(看起来这两种方法都不好):

//string postData = "{\"title\":\"Change Title\",  \"description\":\"Create description\",  \"scheduledStartDate\": \"2018-12-24T11:24:48.91Z\",  \"scheduledEndDate'': ''2018-12-25T11:24:48.91Z''  }";

    string postData = @"{''changeNumberForClone'': ''C03688051'',
                        ''scheduledStartDate'': ''2017-12-24T11:24:48.91Z'',
                        ''scheduledEndDate'': ''2017-12-25T11:24:48.91Z''}";        

【问题讨论】:

  • 最好使用 Dictionary 或自定义类型,然后序列化为 json。
  • 像这样手动创建 JSON 非常容易出错,而且根本无法扩展。像 Crowcoder 建议的那样创建和序列化字典。
  • (您使用双引号的尝试被破坏了,因为您在结尾错误地切换到双单引号。)
  • var postData = "{\"changeNumberForClone\":\"C03688051\", \"scheduledStartDate\":\"2017-12-24T11:24:48.91Z\", \"scheduledEndDate\": \"2017-12-25T11:24:48.91Z\"}";

标签: c# json


【解决方案1】:

使用NewtonSoft Json.NET,您可以使用以下代码获取正确的json字符串:

Dictionary<String, String> jsonDict = new Dictionary<String, String>();
jsonDict.Add("changeNumberForClone", "C03688051");
jsonDict.Add("scheduledStartDate", "2017-12-24T11:24:48.91Z");
jsonDict.Add("scheduledEndDate", "2017-12-25T11:24:48.91Z");

String postData = JsonConvert.SerializeObject(jsonDict);

如果您不想在项目中添加新库:

String postData = "{\"changeNumberForClone\":\"C03688051\", \"scheduledStartDate\":\"2017-12-24T11:24:48.91Z\", \"scheduledEndDate\": \"2017-12-25T11:24:48.91Z\"}";

为了使用相同的方法生成具有多个深度的json字符串,您可以使用anonymous objects,如下所示:

var obj = new { abc = new { def = new { one="1", two="2" } } };
var json = JsonConvert.SerializeObject(obj);

或者,如果您更喜欢使用 Dictionary 实例:

var obj = new Dictionary<String,Object>()
{
    {
        "abc", new Dictionary<String,Object>()
        {
            {
                "def" , new Dictionary<String,Object>()
                {
                    { "one", "1" }, {"two", "2" }
                }
            }
        }
    }
};

两种方法的输出如下:

{
   "abc": {
      "def" : {
         "one": "1",
         "two": "2",
      },
   }
}

【讨论】:

  • 使用这种方法如何添加第二级项目,比如说一个服务器列表,下面有多个服务器数据点?换句话说,字典只有一层吗?
  • Dictionary 已经不够用了。看看这个问题:stackoverflow.com/questions/29808718/…... 还有一个使用匿名对象的问题:stackoverflow.com/questions/32529169/…
  • 我需要在 Json 中添加 [ ] 是否可以像 format = new [ "Archive BitTorrent", "JPEG", "JPEG Thumb", "Metadata" ] 一样使用上述 senario。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多