一旦我收到回复并尝试存储它,该对象为空,我收到此错误:
Object reference not set to an instance of an object.
var result = await response.Content.ReadAsStringAsync();
var jsonResult = JsonConvert.DeserializeObject<dynamic>(result);
var value = (JToken)jsonResult.value;
答案 0 :(得分:2)
在尝试之前尝试检查jsonResult!= null(JToken)jsonResult.value
[编辑]
你可以使用var value =(JToken)jsonResult;最后不需要.value。
var result = "{ \"id\": \"/apis/574c167dcd7c3216c8c633b3\", \"name\": \"Servicedesk and Operations\", \"description\": \"Servicedesk and Operations Internal API\", \"serviceUrl\": \"dev-endpoint.com\", \"path\": \"test\", \"protocols\": [ \"http\", \"https\" ], \"authenticationSettings\": { \"oAuth2\": null, \"openid\": null }, \"subscriptionKeyParameterNames\": { \"header\": \"Ocp-Apim-Subscription-Key\", \"query\": \"subscription-key\" } }";
var jsonResult = JsonConvert.DeserializeObject<dynamic>(result);
var value = (JToken)jsonResult;
var id = value["id"].ToString();
[额外编辑]
或者你可以选择
var id2 = jsonResult.id;
因为那里有动态
答案 1 :(得分:1)
Object reference not set to an instance of an object
。特定类型应该具有变量,该变量最终在运行时解析为null。在发布的代码中,只有两个机会可以实现:
response.Content.ReadAsStringAsync()
,其中response
或Content
为空。jsonResult.value
,其中jsonResult
为空。我的猜测是它实际上Content
为空,因为如果响应中没有正文(并且没有必要),则Content
未初始化。一般来说,每当你有一些可能为null的东西时,即使你从未想到它,你应该总是通过显式检查带有if
语句的值来捕获它:
if (foo != null)
{
...
}
三元:
var bar = foo != null ? foo.Bar : "default";
或null coalesce:
var bar = (foo ?? new Foo()).Bar;