HResult=0x80131500 Message='<' is an invalid start of a value. LineNumber: 0 | B...

2025年11月26日 11:54 状态: processing

🚨 错误信息

`System.Text.Json.JsonReaderException HResult=0x80131500 Message='<' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0. Source=System.Text.Json StackTrace: 在 System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes) `

🤖 AI解决方案

错误翻译

原文:'<' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
译文:'<' 不是一个有效的值起始字符。行号:0 | 行内字节位置:0。

原因分析

  • 根本原因:JSON解析器期望接收有效的JSON数据,但实际接收到的字符串以 '<' 字符开头,这通常是XML或HTML格式的标志

  • 具体位置:在JSON解析的起始位置(行号0,字节位置0)检测到非法字符
  • 解决方案

    情况1:如果应该是JSON格式但收到XML

    // 确保接收的是纯JSON数据,不是XML包装的JSON
    string jsonData = responseContent.Trim();
    // 或者需要从XML中提取JSON部分
    if (jsonData.StartsWith("<"))
    {
        // 从XML响应中提取JSON内容
        jsonData = ExtractJsonFromXml(responseContent);
    }
    
    // 然后进行JSON反序列化
    var result = JsonSerializer.Deserialize<T>(jsonData);

    情况2:API返回格式错误,需要明确指定Content-Type

    // 设置HTTP请求头,明确要求JSON格式
    var request = new HttpRequestMessage
    {
        RequestUri = new Uri(apiUrl),
        Method = HttpMethod.Get,
        Headers = { { "Accept", "application/json" } }
    };

    预防措施

  • 内容类型验证:在反序列化前验证响应内容的Content-Type头

  • 数据格式检查:添加前置检查逻辑,确保接收的是有效JSON格式

// 预防性检查示例
public static bool IsValidJson(string input)
{
    input = input.Trim();
    return (input.StartsWith("{") && input.EndsWith("}")) || 
           (input.StartsWith("[") && input.EndsWith("]"));
}