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

使用QuickType生成C#对象时遇ParseStringConverter找不到错误求助

解决CS0246: 找不到'ParseStringConverter'的问题

方案1:补全QuickType生成的ParseStringConverter辅助类

ParseStringConverter是QuickType为System.Text.Json生成的自定义转换器,用于将JSON中的字符串类型数字转为C#的long类型。你大概率只复制了实体类代码,遗漏了这个辅助类。将以下代码添加到同一个QuickType命名空间下即可:

public partial class ParseStringConverter : JsonConverter<long>
{
    public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        if (reader.TokenType == JsonTokenType.String)
        {
            if (long.TryParse(reader.GetString(), out long result))
            {
                return result;
            }
        }
        return reader.GetInt64();
    }

    public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString());
    }
}

方案2:切换为Newtonsoft.Json适配代码

你当前使用的是Newtonsoft.Json,但QuickType默认生成的是System.Text.Json兼容代码,两者特性不兼容,可通过以下步骤修改适配:

  1. 替换所有[JsonPropertyName("xxx")]为Newtonsoft的[JsonProperty("xxx")]
  2. 处理字符串转数字的逻辑,二选一即可:
    • 选项A:利用Newtonsoft内置的字符串转数字支持,在反序列化时配置参数:
      var settings = new JsonSerializerSettings
      {
          AllowReadingFromString = true
      };
      var sessionDetails = JsonConvert.DeserializeObject<SessionDetails>(jsonString, settings);
      
      此方式可直接移除所有[JsonConverter(typeof(ParseStringConverter))]属性。
    • 选项B:自定义Newtonsoft专属转换器:
      public class StringToLongConverter : JsonConverter<long>
      {
          public override long ReadJson(JsonReader reader, Type objectType, long existingValue, bool hasExistingValue, JsonSerializer serializer)
          {
              if (reader.Value is string str)
              {
                  long.TryParse(str, out long result);
                  return result;
              }
              return Convert.ToInt64(reader.Value);
          }
      
          public override void WriteJson(JsonWriter writer, long value, JsonSerializer serializer)
          {
              writer.WriteValue(value.ToString());
          }
      }
      
      然后将属性上的转换器改为[JsonConverter(typeof(StringToLongConverter))]
  3. 替换[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]为[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

方案3:重新生成适配Newtonsoft.Json的代码

在QuickType生成代码时,选择Serializer为Newtonsoft.Json,生成的代码会直接适配你当前使用的库,自动包含对应转换器,无需手动修改。

内容的提问来源于stack exchange,提问作者Alex Baker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:31:08