请参阅:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.IO;
namespace TestJson2
{
class Program
{
private static List<string> myCollections;
static void Main(string[] args)
{
myCollections = new List<string>();
myCollections.Add("frog");
myCollections.Add("dog");
myCollections.Add("cat");
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jsonWriter = new JsonTextWriter(sw))
{
jsonWriter.Formatting = Formatting.None;
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("id");
jsonWriter.WriteValue("12345");
jsonWriter.WritePropertyName("title");
jsonWriter.WriteValue("foo");
string animals = CollectionToJson();
jsonWriter.WritePropertyName("animals");
jsonWriter.WriteValue(animals);
jsonWriter.WriteEndObject();
}
var result = sw.ToString();
}
private static string CollectionToJson()
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jsonWriter = new JsonTextWriter(sw))
{
jsonWriter.Formatting = Formatting.None;
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("animals");
jsonWriter.WriteStartArray();
foreach (var animal in myCollections)
{
jsonWriter.WriteValue(animal);
}
jsonWriter.WriteEndArray();
jsonWriter.WriteEndObject();
}
return sw.ToString();
}
}
}
结果变量的内容最终为:
{"id":"12345","title":"foo","animals":"{"animals":["frog","dog","cat"]}"}
现在,随着json层次结构越来越深(为了简洁起见,我在这里没有显示多个层),斜杠变成了多个:\
。我知道我们需要转义",这样它就不会终止字符串,但这个字符串的最终用户不应该只看到没有反斜杠的JSON吗?我做错了什么?
谢谢!
您将在彼此内部嵌入多个独立的json字符串。外部json编写器不知道您在内部构建了另一个json字符串,所以他们只将其视为明文字符串,而不是json,并且必须转义引号。
与其在…上的json上构建json,不如构建一个数据结构并将其传递给单个json构建器。
只创建一个C#对象来表示数据并使用JsonSerializer
将其转换为json字符串会简单得多。