反序列化过程中出错解析值后遇到意外字符:¥

Error during deserialization After parsing a value an unexpected character was encountered: Қ

我正在尝试反序列化 JSON 数据。反序列化时出现错误“在解析一个值后遇到了一个意外的字符:¥”

我正在使用 newtonsoft.json

    class Program
    {
        static void Main(string[] args)
        {
            string json = "{\"protocolTable\":[{\"OrderNo\":\"08\",\"NameDoc\":\"Жергілікті маңызы бар балық \r\nшаруашылығы су айдындарын\r\nжәне (немесе) учаскелерін жануарлар \r\nдүниесін пайдаланушыларға бекіту туралы\"},{\"OrderNo\":\"07\",\"NameDoc\":\"Аңшылық шаруашылығын \r\nжүргізу үшін аңшылық алқаптарды \r\nжануарлар дүниесін пайдаланушыларға \r\nбекiтiп беру туралы\"},{\"OrderNo\":\"06\",\"NameDoc\":\"Спорттық ұйым атауларының\r\nөзгеруі туралы\"},{\"OrderNo\":\"05\",\"NameDoc\":\"Мемлекеттік мүлікті \r\nоблыстық коммуналдық \r\nмүлік деңгейінен\r\nаудандық коммуналдық\r\nмүлік деңгейіне \r\nберу туралы\"},{\"OrderNo\":\"04\",\"NameDoc\":\"Сыйға тарту шарты бойынша\r\nмүлік құқығына ие болу туралы\"},{\"OrderNo\":\"03\",\"NameDoc\":\"Мемлекеттік мекемелердің \r\nЕрежелерін бекіту туралы\"},{\"OrderNo\":\"02\",\"NameDoc\":\"\"Қарағанды облысының\r\nбілім басқармасы\" \r\nмемлекеттік мекемесінің \r\nЕрежесін бекіту туралы\"},{\"OrderNo\":\"01\",\"NameDoc\":\"Қарағанды облысының\r\nбілім бөлімдері мен білім беру\r\nұйымдарын қайта атау туралы\"}]}";
            JsonConvert.DeserializeObject<Protocols>(Regex.Unescape(json)); 
        }
    }

    public class Protocols
    {
        [JsonProperty("ProtocolTable")]
        public List<ProtocolTable> protocolTable { get; set; }
    }

    public class ProtocolTable
    {
        public string OrderNo { get; set; }
        public string NameDoc { get; set; }
    }

您的 json 字符串无效:

...\"\"Қарағанды облысының\r\nбілім басқармасы\" \r\nмемлеке...

调用 Regex.Unescape 后将是 "NameDoc":""Қарағанды облысының білім басқармасы" - 这是无效的 json 字符串,删除一个 \ " 从一开始和一个 \" 来自 басзармасы

实际上 JsonConvert 向您展示了它的错误消息存在问题:_ 解析值后遇到了意外字符:¥

要快速验证一些 json 字符串,您可以使用在线提供的一些工具,例如 this 一个。

您的 json 无效。它在引号内有引号。您必须修复创建此 json 的代码。如果不可能,那么您可以使用此代码手动反序列化它

List<ProtocolTable> protocolTable = json.Substring(json.IndexOf("[{")+2).Replace("}]}","").Split("},{")
                                         .Select(i => i.Split("\",\""))
                                         .Select(i => new ProtocolTable { 
                                         OrderNo=i[0].Substring(11), 
                                         NameDoc=i[1].Substring(10).TrimEnd('"')})
                                         .ToList();