0

我讨厌添加到5,000 多个 JSON.NET 反序列化错误,但是任何人都可以在下面的 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 }

关税类别定义

    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; }

}
4

1 回答 1

0

好的,所以我在通宵调试后终于解决了...

就像这个关于WCF 序列化的问题一样,问题围绕着尝试重新序列化为 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;
}

奇迹般有效。我不确定这是否是设计行为,这有点痛苦,因为我需要为许多对象重复这种模式,但至少它有效!

希望这对其他人有帮助!

于 2012-08-01T10:51:33.497 回答