C#中如何反序列化包含多个同类型对象的追加格式字符串?
处理多段JSON数组拼接的反序列化方案
你手头的是两段独立的JSON数组字符串,每段都包含一个Company对象,要把它们合并反序列化为一个Company列表,不需要自行编写JSON阅读器,主流JSON库都有现成方案处理,具体可以按以下两种思路操作:
方案一:预处理字符串为合法JSON数组
先把拼接的字符串转换成标准的单个JSON数组,再用常规反序列化方法处理:
- 清理原始字符串,去掉换行符,把两段数组衔接处的
][替换为,,让整个字符串变成一个包含多个Company对象的合法数组。 - 用JSON库直接反序列化为
List<Company>。
以C#的Newtonsoft.Json为例:
// 原始拼接的JSON字符串 string rawJson = @"[{""companyName"":""ABC"",""Employees"":[{""Name"":""X"",""Age"":24},{""Name"":""Y"",""Age"":27}]}] [{""companyName"":""XYZ"",""Employees"":[{""Name"":""A"",""Age"":24},{""Name"":""B"",""Age"":27}]}]"; // 预处理字符串 string cleanedJson = rawJson.Replace("\n", "").Replace("][", ","); // 反序列化为Company列表 List<Company> companies = JsonConvert.DeserializeObject<List<Company>>(cleanedJson);
如果用.NET自带的System.Text.Json:
List<Company> companies = JsonSerializer.Deserialize<List<Company>>(cleanedJson);
方案二:用JSON库的多内容读取API
如果不想修改原始字符串,可以直接用JSON库提供的支持多段JSON内容读取的功能,逐段解析每个数组里的Company对象。
还是以Newtonsoft.Json为例:
List<Company> companies = new List<Company>(); using (StringReader sr = new StringReader(rawJson)) using (JsonTextReader reader = new JsonTextReader(sr)) { // 开启多内容支持 reader.SupportMultipleContent = true; JsonSerializer serializer = new JsonSerializer(); while (reader.Read()) { // 识别数组开始标记,遍历读取数组内的Company对象 if (reader.TokenType == JsonToken.StartArray) { while (reader.Read() && reader.TokenType != JsonToken.EndArray) { Company company = serializer.Deserialize<Company>(reader); companies.Add(company); } } } }
其他语言的主流JSON库(比如Java的Jackson、Gson,Python的json模块)也有类似的多内容解析能力,核心思路要么是先把拼接内容转成合法JSON,要么是逐段读取解析。
内容的提问来源于stack exchange,提问作者monalisha saha
相关产品推荐
相关产品推荐

