c# - 如何最轻松地将带有字符串的 JSON 转换为带有数组的 JSON?

标签 c# arrays json

我需要编写一个名为 public string PreparationForDeserialization(string json) 的方法,它可以像这样转换 JSON 字符串:

{"To":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbb5bab6be9bb8b4b6abbab5a2f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f212e222a7d0f2c20223f2e2136612c2022" rel="noreferrer noopener nofollow">[email protected]</a>, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="97f9f6faf2a4d7f4f8fae7f6f9eeb9f4f8fa" rel="noreferrer noopener nofollow">[email protected]</a>","CC":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="91fff0fcf4f2f2d1f2fefce1f0ffe8bff2fefc" rel="noreferrer noopener nofollow">[email protected]</a>","BCC":""}

像这样的 JSON 字符串:

{"To":["<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="127c737f7752717d7f62737c6b3c717d7f" rel="noreferrer noopener nofollow">[email protected]</a>", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f212e222a7d0f2c20223f2e2136612c2022" rel="noreferrer noopener nofollow">[email protected]</a>", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0a646b676f394a6965677a6b647324696567" rel="noreferrer noopener nofollow">[email protected]</a>"],"CC":["<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cca2ada1a9afaf8cafa3a1bcada2b5e2afa3a1" rel="noreferrer noopener nofollow">[email protected]</a>"],"BCC":[]}

在我开始使用 Substring()Regex.Replace() 解决这个问题之前,我是否有某种更简单的 JSON 字符串到数组转换器可以使用,或者将带有字符串的序列化 JSON 字符串转换为带有数组的序列化 JSON 字符串的最简单方法是什么?

最佳答案

您应该为此使用一些 JSON 库(例如 Json.net )。这将解决手动操作 JSON 字符串时您可能会错过的许多陷阱。

var o1 = JsonConvert.Deserialize<JObject>(jsonstring);

//you can split by ' ' and ',' because email addresses won't contain any whitespaces. For other purposes you may need better splitting rules.
var to = o1.Value<string>("To").Split(new char[]{' ', ',"}, StringSplitOptions.RemoveEmptyEntries);
var cc = o1.Value<string>("CC").Split(new char[]{' ', ',"}, StringSplitOptions.RemoveEmptyEntries);
var bcc = o1.Value<string>("BCC").Split(new char[]{' ', ',"}, StringSplitOptions.RemoveEmptyEntries);
var outstring = JsonConvert.SerializeObject(new JObject{
   {"To", JArray.FromObject(to)},
   {"CC", JArray.FromObject(cc)},
   {"BCC", JArray.FromObject(bcc)},
});

请注意,没有错误处理。例如,如果原始字符串错过了三个列表之一,则会抛出异常。

关于c# - 如何最轻松地将带有字符串的 JSON 转换为带有数组的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51767874/

相关文章:

php - Foreach 循环总是将字符串的第一个字符添加到数组中

Javascript - 将多个动态值添加到 for 循环中的动态键

java - Android 适配器传递 JSON 对象数据?

javascript - 代码到html转换器

c# - MVC C# 自定义 MvcRouteHandler - 如何?

java - 计算结果为0.0?

javascript - 是否可以对本地文件使用 xhr?

json - 解析Amazon Electronics评论Apache Pig

c# - 库中的 ConfigureAwait(false) 是否会丢失调用应用程序的同步上下文?

c# - ASP.NET 捕获并替换 Global.asax 中的输出