我正在尝试用C#编写一个JSON文件,我有一个问题,我想用逗号(',')分隔每个对象,因为它是有效的JSON,但我无法弄清楚如何去做这个。我搜索了是否有一种方法可以搜索字符串中的特定模式(在我的例子中它将是'} {')并且正则表达式可能有效,但我不知道如何创建一个。
最终结果应该是
'},{'
而不是
'}{'.
到目前为止,这是我的代码:
private void loopThroughArray()
{
string json = "";
for (int i = 0; i < array.Count; i++)
{
MyObject t = array[i];
json += new JavaScriptSerializer().Serialize(t);
//this writes the json to the file but without comma seperator
}
System.IO.File.WriteAllText(@"<MyFilepath>\json.txt", "{\"json\":[" + json + "]}");
//this writes the json to a file that and is in a json array called 'json'
}
答案 0 :(得分:1)
根据@Measuring的建议,我查看了序列化JSON的不同方法,并发现这是我认为最简单的方法:
json = JsonConvert.SerializeObject(MyObject);
完美无缺,谢谢@Measuring!
答案 1 :(得分:1)
我同意@Measuring
当有this answer中确定的工具可供使用时,编写自己似乎过于复杂。
尽管如此,你可以做以下事情......
string json = "";
for (int i = 0; i < array.Count; i++){
MyObject t = array[i];
json += new JavaScriptSerializer().Serialize(t);
}
string pattern = "\}{\";
string replacement = "},{";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(json, replacement);
答案 2 :(得分:1)
您尝试做的事情可以通过string.Join
和一点Linq来解决
var serializer = new JavaScriptSerializer();
var json = string.Join( ",", array.Select( e => serializer.Serialize(e) );
答案 3 :(得分:0)
看起来像这样:
json += new JavaScriptSerializer().Serialize(t);
正在创建{json object}
。您的解决方案可能像添加,
一样简单,如:
json += new JavaScriptSerializer().Serialize(t) + ",";
编辑(回复您的评论):
您可以通过内部检查轻松跳过最后一个循环。
json += new JavaScriptSerializer().Serialize(t);
if (i < array.Count - 1) json += ",";
或者,您可以将for-loop 1项目缩短,并在循环后添加最后一项。
答案 4 :(得分:0)
使用StringBuilder比使用+ =更有效,你应该避免在循环中创建可重用的对象。
尽可能接近您的代码,您可以尝试:
private void loopThroughArray()
{
var serializer = new JavaScriptSerializer();
var json = new System.Text.StringBuilder();
for (int i = 0; i < array.Count; i++)
{
MyObject t = array[i];
json.Append(serializer.Serialize(t));
if (i < array.Count)
json.Append(",");
}
System.IO.File.WriteAllText(@"<MyFilepath>\json.txt", "{\"json\":[" + json.ToString() + "]}");
}
但尝试可能更简单:
private void loopThroughArray()
{
var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(array);
System.IO.File.WriteAllText(@"<MyFilepath>\json.txt", "{\"json\":" + json.ToString() + "}");
}
但是,如果我这样做,我会在匿名类型上使用Json.Net的JsonConvert:
System.IO.File.WriteAllText(
@"<MyFilepath>\json.txt",
JsonConvert.SerializeObject(new {
json = array
}));
您可以从nuget获取Json.Net。
答案 5 :(得分:0)
JsonNet确实更容易使用,但在你的情况下感觉就像
JavaScriptSerializer
工作正常。大概你期望“{json:[...]}”结果 - 序列化new {json = array}
而不仅仅是array
将产生输出:
var finalJson = new JavaScriptSerializer().Serialize(new {json = array});
附注:在构造JSON或XML时请避免手动字符串操作 - 这不值得付出努力,并且在大多数情况下导致结果有些错误。
答案 6 :(得分:0)
嗨Kevin不可能使用正则表达式替换字符串,
/}{/g
并替换为
},{