2
我使用JSON.NET反序列化從瀏覽器發送的AJAX HTTP請求,並且遇到了使用Guid []作爲參數的Web服務調用的問題。當我使用內置的.NET序列化器時,這工作得很好。反序列化GUID數組時JSON.NET異常
首先,在流看上去像這樣的原始字節:
System.Text.Encoding.UTF8.GetString(rawBody);
"{\"recipeIds\":[\"d9ede305-d244-483b-a435-abcf350efdb2\"]}"
然後我打電話:
Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
parameters[0] = serializer.Deserialize(sr, operation.Messages[0].Body.Parts[0].Type);
.Type
是System.Guid[]
然後我得到異常:
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Guid[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'recipeIds', line 1, position 13.
接受單個Guid(而非數組)工作的Web服務方法,所以我知道JSON.NET能夠將字符串轉換爲GUID,但是當您擁有一組您想要的字符串數組時,它似乎會炸燬將其反序列化爲一個GUID數組。
這是一個JSON.NET的錯誤,有沒有辦法解決這個問題?我想我可以寫我自己的自定義Guid集合類型,但我寧願不。
所以那麼這是一個JSON.NET錯誤。 –
@MikeChristensen不,請參閱您的json中的recipeIds。你得到一個包含Guid數組的屬性'recipeIds'的對象。 –
你說得對。這個序列化程序實際上工作正常,它是這個WCF格式化程序的JSON.NET有bug。我需要重新工作一些邏輯。 –