将JSON对象反序列化为System.Guid

时间:2017-07-14 16:41:44

标签: c# json json.net deserialization

我所拥有的是JSON格式的REST响应,如下所示:{ "guid": "c75d06a8-a705-48ec-b6b3-9076becf20f4" }

当尝试将此响应String反序列化为System.Guid类型的Object时,如下所示:Newtonsoft.Json.JsonConvert.DeserializeObject(response.content, type);,抛出以下异常:

  

无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Nullable .1 [System.Guid]',因为该类型需要JSON原语值(例如字符串,数字,布尔值) ,null)正确反序列化。   要修复此错误,请将JSON更改为JSON原始值(例如string,number,boolean,null)或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是集合类型像数组或List一样,可以从JSON对象反序列化。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。   路径'guid',第1行,第8位。

感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

如果您不想创建只包含Guid值的类,可以使用动态变量:

string json = "{ \"guid\": \"c75d06a8-a705-48ec-b6b3-9076becf20f4\" }";
dynamic container = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);
Guid guid;
Guid.TryParse(container.guid.ToString(), out guid);
Console.WriteLine(guid);    
// c75d06a8-a705-48ec-b6b3-9076becf20f4

答案 1 :(得分:0)

自从我做过这类事以来,它已经有点了,不过我认为答案就在你的错误信息中。让它以字符串形式返回。在您的类中重写guid字符串属性以设置GUID类型的另一个属性,并在那里执行转换和错误处理。另一种方法是使用构造函数来帮助这里。希望这会给你一个方向。