2014-06-24 18 views
3

我在我的Web API項目的模型,它接受兩個整數:的ASP.NET Web API處理兩個整數不同的方式

public int ParentId { get; set; } 
public int ChildId { get; set; } 

雖然測試API,我測試發送瘋狂大數字(像你這樣做)的的JSON消息:

{ 
    ParentId: 333333333333333333333333333333333333333, 
    ChildId: 1 
} 

在上述情況下,ParentId變得0。快樂的時光。

在以下情況下,ChildId以完全相同的瘋狂大數傳遞,整個模型結束null

{ 
    ParentId: 1, 
    ChildId: 333333333333333333333333333333333333333 
} 

爲什麼這不是簡單地造成ChildId成爲0ParentId做?

+1

有趣,看起來像我的錯誤。只有當「錯誤」值是json數據中的最後一個參數時纔會發生這種情況。例如,如果您添加另一個具有正常值的整數並在ChildId後面提供它,那麼整個模型會再次正常。 – djikay

+0

啊是的 - 如果我重新排序,問題變成'如果最後一個元素有一個瘋狂的大數字' - 好建議! – Fenton

回答

2

你可以通過追加逗號來解決這個問題。整潔的</sarcasm>

{ 
    ParentId: 2, 
    ChildId: 333333333333333333333333333333333333333, 
} 

所以它確實看起來像@djikay在上面的註釋中指出的解串器錯誤。

更新:該問題已得到修復:https://github.com/JamesNK/Newtonsoft.Json/issues/315

+1

如果添加XML序列化程序:var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter; xml.UseXmlSerializer = true;'到你的項目中,那麼它不會接受任何錯誤的值,並且總是會產生一個'null'模型。這似乎是默認的json serialiser的「特性」。 – djikay

+0

是的 - 無論如何,我們發現XML總是空的 - JSON似乎更寬容。這是一個邊緣案例,所以我不認爲我們實際上會修改任何代碼來修復它 - 但我們會處理可能的結果。 – Fenton

+0

對於Codeplex來說,值得注意的地方是各種MS開發者漫遊的地方(雖然他們也在這裏)。它看起來像一個真正的bug;我不明白爲什麼這隻會是json的預期行爲。 – djikay

相關問題