我需要编写一个名为 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/