我需要编写一个名为public string PrepareForDeserialization(string json)
的方法,它可以像这样转换一个JSON字符串:
{"To":"[email protected], [email protected], [email protected]","CC":"[email protected]","BCC":""}
到这样的JSON字符串:
{"To":["[email protected]", "[email protected]", "[email protected]"],"CC":["[email protected]"],"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)},
});
请注意,没有错误处理。例如,如果原始字符串错过了三个列表中的一个,则会抛出。
使用Newtonsoft.Json
string strJson = @"{'To':'name @company.com, name2 @company.com, name3 @company.com','CC':'namecc @company.com','BCC':''}";
dynamic jsonObject = JsonConvert.DeserializeObject(strJson);
Dictionary<string, string[]> val = new Dictionary<string, string[]>();
foreach (var prop in jsonObject)
{
string name = prop.Name;
string[] datas = Convert.ToString(prop.Value).Split(',');
val.Add(name, datas);
}
string op = JsonConvert.SerializeObject(val);