我讨厌添加到5,000+ JSON.NET deserialisation errors,但任何人都可以在下面的JSON中看到可能导致问题的任何内容吗? JSONLint和JSONViewer都声明该字符串是有效的,事实上它已经被JSON.NET序列化而没有任何问题!它所代表的Tariff对象的类定义也在下面。
这让我完全陷入困境 - 当我使用.NET的JavascriptSerialiser类时,我也遇到了完全相同的问题。它序列化很好,但在反序列化时会抛出以下错误:
转换值时出错[下面的JSON字符串] 'emAPI.ClassLibrary.Tariff'。路径'',第1行,第374位。
第1行pos 374介于0和字符串末尾0.5之间的句点之间,表示类中的double StandingChargeValue
。
任何有关如何解决的想法?
谢谢大卫
JSON字符串
{ "StandingChargePeriod": { "Id": 4, "Length": "Weekly", "NumbDays": 7 }, "Bands": [ { "Id": 24, "UpperkWhLimit": 23, "LowerkWhLimit": 0, "UnitRate": 2.4 }, { "Id": 25, "UpperkWhLimit": 0, "LowerkWhLimit": 24, "UnitRate": 5.8 }, { "Id": 26, "UpperkWhLimit": -1, "LowerkWhLimit": 0, "UnitRate": 5.8 } ], "Id": 10, "StartDate": "2012-12-07T00:00:00", "StandingChargeValue": 0.5 }
关税等级def
public class Tariff
{
[ScaffoldColumn(false)]
public int Id { get; set; }
[Required]
public DateTime StartDate { get; set; }
[Required]
[Range(0, 999999999)]
public double StandingChargeValue { get; set; }
public virtual Period StandingChargePeriod { get; set; }
public virtual ICollection<TariffBand> Bands { get; set; }
}
答案 0 :(得分:0)
好的,所以我终于在通宵调试会议之后解决了......
就像关于WCF serialisation的这个问题一样,问题围绕着尝试重新序列化到EF4.3代理对象。要解决它,而不是直接从EF上下文返回对象:
public getTariff(int id)
{
return context.Tariffs.Find(id);
}
我创建了一个新对象,复制了属性并返回了新对象:
public getTariff(int id)
{
Tariff holdingTariff = context.Tariffs.Find(id);
Tariff tariff = new Tariff();
tariff.X = holdingTariff.X;
//repeat for all attributes
return tariff;
}
像魅力一样工作。我不确定这是否是设计行为,并且由于我需要为许多对象重复这种模式,这有点痛苦,但至少它有效!
希望这会帮助别人!