2012-07-31 70 views
0

我討厭將其添加到5,000+ JSON.NET deserialisation errors,但任何人都可以在下面的JSON中看到任何可能導致問題的東西嗎? JSONLint和JSONViewer都聲明該字符串是有效的,事實上它已經被JSON.NET序列化了,沒有任何問題!它所代表的關稅對象的類定義也在下面。JSON.net Deserialise錯誤 - JSON字符串有效

這讓我非常難過 - 當我使用.NET的JavascriptSerialiser類時,我也遇到了完全相同的問題。它串行化細,但在其deserialisation引發以下錯誤:

Error converting value [JSON string below] 'emAPI.ClassLibrary.Tariff'. Path '', line 1, position 374.

線1個POS 374是0,並且在字符串,其表示在類double StandingChargeValue的端部在0.5期間之間。

任何有關如何解決任何想法?

謝謝,大衛

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

} 
+0

序列化程序是否明確知道使用哪種方法來解析ICollection 屬性? – 2012-07-31 22:58:05

+0

我不這麼認爲 - 我沒有指定任何東西。然而,我已經序列化/反序列化了其他具有ICollection屬性的對象而沒有問題,並且(奇怪地)具有ICollection 作爲屬性的其他對象。你知道我可以在哪裏指定如何爲特定屬性指定結核嗎? – dav83 2012-07-31 23:09:23

回答

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

就像一個魅力。我不確定這是否是設計好的行爲,並且這有點痛苦,因爲我需要爲許多對象重複這種模式,但至少它是有效的!

希望這會幫助別人!