You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何反序列化包含多个同类型对象的追加格式字符串?

处理多段JSON数组拼接的反序列化方案

你手头的是两段独立的JSON数组字符串,每段都包含一个Company对象,要把它们合并反序列化为一个Company列表,不需要自行编写JSON阅读器,主流JSON库都有现成方案处理,具体可以按以下两种思路操作:

方案一:预处理字符串为合法JSON数组

先把拼接的字符串转换成标准的单个JSON数组,再用常规反序列化方法处理:

  1. 清理原始字符串,去掉换行符,把两段数组衔接处的][替换为,,让整个字符串变成一个包含多个Company对象的合法数组。
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:55:24