C# 为什么JsonConvert.DeserializeObject更改字符串值?

C# 为什么JsonConvert.DeserializeObject更改字符串值?,c#,json,rest,asp.net-web-api,json.net,C#,Json,Rest,Asp.net Web Api,Json.net,我从RESTWebAPI得到了正确的结果,但当我尝试反序列化结果时,它会将字符串值“034342323”更改为“7455955” 我的班级 public class DataModel { public int Id { get; set; } public string ABN { get; set; } public string AccountNumber { get; set; } } JSON结果 [{

我从RESTWebAPI得到了正确的结果,但当我尝试反序列化结果时,它会将字符串值“034342323”更改为“7455955

我的班级

public class DataModel
     {

         public int Id { get; set; }

         public string ABN { get; set; }

         public string AccountNumber { get; set; }

     }
JSON结果

[{"Id":1,"ABN":"9949876532","AccountNumber":"034342323"}]
呼叫代码

 using (HttpResponseMessage response = await client.GetAsync(url).ConfigureAwait(false))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        var result = await response.Content.ReadAsStringAsync();

                        result = result.Replace("\"", string.Empty).Trim();
                        result = result.Replace("\\", string.Empty).Trim();

                        var data = JsonConvert.DeserializeObject<IEnumerable<DataModel>>(result);

                      [...]


                    }
附加的

如果我不删除“”,它将无法理想化并抛出错误

{"Error converting value \"[{\"Id\":1,\"ABN\":\"9949876532\",\"AccountNumber\":\"034342323\"}]\" to type 'System.Collections.Generic.IEnumerable`1[DataModel]'
  . Path '', line 1, position 174."}

        Could not cast or convert from System.String to System.Collections.Generic.IEnumerable`1[DataModel].
解决方案

   result = result.Replace("\"", "").Trim();
   result = result.Replace("\\", "'").Trim(); //This line is the tricks

感谢安德鲁的解释。因此,我通过微小的修改克服了这个问题。

这个行为是经过设计的:Json.Net将以“0”开头的整数字符串视为八进制数(
八进制34342323
==
十进制7455955
):


生成json时,请查看添加AccountNumber的代码,确保删除前导的
“0”

,但只有在他删除引号后,才会开始这样解释。只要它是字符串(用引号括起来),它就不重要了,对吗?是的。请看第3节这里这听起来像是目击的行为,但它看起来根本不是设计的-它看起来像一个bug。您链接到的工作项谈到数字,在OP的例子中,数字是反序列化字符串的。@BenjaminGruenbaum,OP删除代码中的引号,意思是
“AccountNumber”:“034342323”
变成
AccountNumber:034342323
,json.net开始将数字处理为八进制@Andrew:如果我需要0,他们有什么办法吗?
   result = result.Replace("\"", "").Trim();
   result = result.Replace("\\", "'").Trim(); //This line is the tricks