当我发送请求时,服务器将发送如下响应:
{
"id":"YWauEwCUIe",
"name":"User 1",
"status":"DONE"
}
为此,我正在使用以下代码:
var client = new RestClient(mServer);
var request = new RestRequest(Method.POST);
request.AddQueryParameter("action", "GET");
IRestResponse response = client.Execute(request);
string mResponse = response.Content;
mUser = new JObject();
mUser = JObject.Parse(mResponse); // Error Line
string mStatus = mUser["status"].ToString();
if (mStatus.Equals("DONE")
{
MessageBox.Show("Status: DONE");
}
错误:Newtonsoft.Json.JsonReaderException:'从JsonReader读取JObject时出错。当前的JsonReader项不是对象:空。路径”,第1行,位置4。'
答案 0 :(得分:0)
我的回答是null
导致MySQL
错误的原因,现在它已解决。
PHP
代码:
<?php
$Message['id'] = "YWauEwCUIe";
$Message['name'] = "User 1";
$Message['status'] = "DONE";
echo json_encode($Message);
?>
,这将显示此result
:
{
"id":"YWauEwCUIe",
"name":"User 1",
"status":"DONE"
}
此C#
代码将起作用:
var client = new RestClient(mServer);
var request = new RestRequest(Method.POST);
request.AddQueryParameter("action", "GET");
IRestResponse response = client.Execute(request);
string mResponse = response.Content;
mUser = new JObject();
mUser = JObject.Parse(mResponse);
string mStatus = mUser["status"].ToString();
if (mStatus.Equals("DONE")
{
MessageBox.Show("Status: DONE");
}
答案 1 :(得分:-1)
我会使用非常受欢迎的NewtonSoft库:
采用从服务器获得的响应形状(假设JSON对象不变并且您具有所有字段),可以在此处生成响应类:https://app.quicktype.io/#l=cs&r=json2csharp
对我来说,它生成了以下代码:
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Welcome
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("status")]
public string Status { get; set; }
}
public partial class Welcome
{
public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
这是我的示例代码:
using System;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace JsonParse
{
public partial class Welcome
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("status")]
public string Status { get; set; }
}
public partial class Welcome
{
public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
class Program
{
static void Main(string[] args)
{
var jsonPayload = "{\"id\":\"YWauEwCUIe\",\"name\":\"User 1\",\"status\":\"DONE\"}";
var jsonAsObject = Newtonsoft.Json.JsonConvert.DeserializeObject<Welcome>(jsonPayload);
Console.WriteLine($"{jsonAsObject.Id} {jsonAsObject.Name} {jsonAsObject.Status}");
Console.ReadKey();
}
}
}