JSON.net反序列化错误 - JSON字符串有效

时间:2012-07-31 21:55:26

标签: json asp.net-mvc-3 json.net

我讨厌添加到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; }

}

1 个答案:

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

像魅力一样工作。我不确定这是否是设计行为,并且由于我需要为许多对象重复这种模式,这有点痛苦,但至少它有效!

希望这会帮助别人!