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

如何使用C#将指定格式字符串转换为预期结构的JSON字符串

问题核心原因

  • 未对输入JSON中每个对象的Synonyms字段做内容解析,仅创建了空的DTO实例填充列表,最终序列化结果自然为空
  • Synonyms字段存储的是带转义引号的拼接字符串,需要额外处理才能拆分出独立的同义词项
  • 使用Assert.Same判断字符串相等逻辑错误,该方法是判断两个变量是否指向内存中的同一个对象,字符串内容相同也会判定失败

调整后的完整代码

[Fact]
public void InputStrToWordAlterationsTest2()
{
    string inputStr = @"[
    {
        ""Synonyms"": ""\""hm\"",\""history matching\"",\""HM\"",\""History Matching\""""
    },
    {
        ""Synonyms"": ""\""risk taking\"",\""Risk Taking\"",\""RISK TAKING\"",\""risk-taking\"",\""Risk-Taking\"",\""RISK-TAKING\""""
    }
]";
    JArray jsonArray = JArray.Parse(inputStr);
    // 存储所有alterations项
    var alterationItems = new List<AlterationsDTO>();
    foreach (JObject item in jsonArray)
    {
        // 取出Synonyms字段的字符串值
        string synonymsStr = item["Synonyms"].ToString();
        // 处理转义字符串:先去掉首尾的引号,再按\",\"分割得到每个同义词
        var synonymsList = synonymsStr.Trim('"')
            .Split(new[] { "\",\"" }, StringSplitOptions.None)
            .ToList();
        // 生成AlterationsDTO
        alterationItems.Add(new AlterationsDTO(synonymsList));
    }
    // 生成最终的根DTO
    var resultDto = new WordAlterationsDTO(alterationItems);
    // 序列化时设置格式对齐预期输出,也可以用Formatting.None压缩格式
    string actual = JsonConvert.SerializeObject(resultDto, Formatting.Indented);
    // 预期字符串统一转成双引号格式,避免单双引号不一致导致判定失败
    string expected = @"{
  ""wordAlterations"": [
    {
      ""alterations"": [
        ""hm"",
        ""history matching"",
        ""HM"",
        ""History Matching""
      ]
    },
    {
      ""alterations"": [
        ""risk taking"",
        ""Risk Taking"",
        ""RISK TAKING"",
        ""risk-taking"",
        ""Risk-Taking"",
        ""RISK-TAKING""
      ]
    }
  ]
}";
    // 用Equal判断字符串内容相等
    Assert.Equal(expected, actual);
}

补充说明

如果你的模型类的构造函数没有实际给属性赋值,需要检查构造函数逻辑,确保传入的列表参数确实赋值给了对应的Alterations和WordAlterations属性,避免序列化时属性为空。

内容的提问来源于stack exchange,提问作者Wilson Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:00