JsonConvert.DeserializeObject <DataSet>中的错误



一个奇怪的错误让我殴打了我的头。为了最大程度地减少电线字段名称上的流量,然后将其放气,然后在另一端膨胀。如果字段名称为" H",并且数据是DateTime,则转换器将崩溃:

newtonsoft.json.jsonserializationException{"错误转换值9/29/2017 10:06:00 am tote'system.double'。路径'dstd [0] .h',第1行,位置293."},而内在的除外," dateTime"到" double"。

在下面的C#示例中,第一组数据(jsondta)崩溃了转换器,第二个数据(jsondtb)却没有。

string jsonDtA = "{'dSTD':[{'v':'7ac36696-9977-4bf1-b211-1be2a01da04d','av':820210,'l':'72a9f721-86e0-4070-9cd9-dfa9d3c4efdd','ab':726943,'N':1,'A':'Y','B':'N','G':'N','E':'N','D':'N','K':0.0000,'O':1,'L':1.25,'H':1.25,'ac':'ProcessTransaction','ad':5,'ae':'2017-09-29T10:06:00','af':5,'h':'2017-09-29T10:06:00'}]}";
string jsonDtB = "{'dSTD':[{'v':'7ac36696-9977-4bf1-b211-1be2a01da04d','av':820210,'l':'72a9f721-86e0-4070-9cd9-dfa9d3c4efdd','ab':726943,'N':1,'A':'Y','B':'N','G':'N','E':'N','D':'N','K':0.0000,'O':1,'L':1.25,'H':1.25,'ac':'ProcessTransaction','ad':5,'ae':'2017-09-29T10:06:00','af':5,'hb':'2017-09-29T10:06:00'}]}";
DataSet dsA = JsonConvert.DeserializeObject<DataSet>(jsonDtA); 
DataSet dsB = JsonConvert.DeserializeObject<DataSet>(jsonDtB);

唯一的区别是JSON集合中的最后一个Datafiel的名称,'H'vs.'Hb'

当然,我的"修复"是在我的通缩图中不使用'H'...

问题是,为什么会发生这种情况,这是一个错误吗?

我正在使用newtonsoft.json v10.0.3

DataTable对象中的列名不敏感。发生的事情是,您的数据中已经有一个称为H的列,并且由于值1.25,该列的数据类型已设置为double。因此,当h属性包含日期时,JSON.NET最终试图用它覆盖原始的双重值,这由于不兼容的类型而爆炸。通过将h更改为hb,您可以避免问题,因为现在所有的列都具有唯一的名称。

这是一个简短的小提琴,证明了这个问题,将json.net完全从等式中取出:https://dotnetfiddle.net/bgmfsb

相关内容

  • 没有找到相关文章

最新更新