C# 仅使用RestSharp将对象转换为json
我创建了一个像这样的小班C# 仅使用RestSharp将对象转换为json,c#,post,restsharp,C#,Post,Restsharp,我创建了一个像这样的小班 public class Device { public Device() { } [DeserializeAs(Name = "u_friendly_name")] //[SerializeAs(Name = "u_friendly_name")] public string Name { get; set; } } } 为了将“Name”映射到“u_-
public class Device
{
public Device()
{
}
[DeserializeAs(Name = "u_friendly_name")]
//[SerializeAs(Name = "u_friendly_name")]
public string Name { get; set; }
}
}
为了将“Name”映射到“u_-friendly_-Name”(应该是json格式),我添加了一个反序列化声明。我的第一个问题是。。如果我想发布/获取json,我是否需要反序列化和序列化,或者反序列化就足够了
做这样的动作效果很好。它会自动获取json并根据需要将其强制转换到设备。然而,写一篇帖子并不是那么简单
public Device GetDevice(string guid)
{
var request = new RestRequest("api/now/table/x_device", Method.GET);
request.RootElement = "result";
var devices = client.Execute<List<Device>>(request);
return devices.Data.FirstOrDefault(d => d.Guid == guid);
}
问题是对象没有转换成json。我看到的不是json输出中的“u_-friendly_-name”,而是“name”。我知道这可以通过Json.Net解决,例如:
string json = JsonConvert.SerializeObject(device);
但这也需要我向项目中添加另一个依赖项,并向类中添加JsonProperty声明。我已经能够使用Json.NET获得POST,但无法获得,反之亦然
有谁能告诉我如何仅使用(最好)RestSharp序列化类的正确方向
编辑:在阅读了大量有关stackoverflow的帖子后,我觉得RestSharp不适合反序列化。我发现以下链接使用了自定义json序列化程序,虽然POST工作得很好,但我不确定GET有什么问题:
但我希望这不必要
Edit2:我已经设法通过向RestSharp客户端添加“addHandler”来让文章正常工作,正如上面的博客文章中所提到的。我还更改了我的类并添加了“设备”定义
public class Devices
{
[JsonProperty(PropertyName = "result")]
public List<Device> devices { get; set; }
}
public class Device
{
public Device()
{
}
[DeserializeAs(Name = "u_friendly_name")]
//[SerializeAs(Name = "u_friendly_name")]
public string Name { get; set; }
}
}
尽管它现在起作用了,我最初的问题仍然存在。如果可能的话,我希望删除Json.Net并只使用RestSharp
public Device GetDevice(string guid)
{
var request = new RestRequest("api/now/table/x_device", Method.GET);
request.RequestFormat = DataFormat.Json;
request.JsonSerializer = NewtonsoftJsonSerializer.Default;
request.RootElement = "result";
var devices = client.Execute<List<Device>>(request);
return devices.Data.FirstOrDefault(d => d.Guid == guid);
}
[JsonProperty(PropertyName = "u_friendly_name")]
[DeserializeAs(Name = "u_friendly_name")]
public class Devices
{
[JsonProperty(PropertyName = "result")]
public List<Device> devices { get; set; }
}
public class Device
{
public Device()
{
}
[DeserializeAs(Name = "u_friendly_name")]
//[SerializeAs(Name = "u_friendly_name")]
public string Name { get; set; }
}
}
public Device GetDevice(string guid)
{
var request = new RestRequest("api/now/table/x_uia_sdm_device", Method.GET);
request.RequestFormat = DataFormat.Json;
request.JsonSerializer = NewtonsoftJsonSerializer.Default;
IRestResponse response = client.Execute(request);
var deviceList = JsonConvert.DeserializeObject<Devices>(response.Content);
return deviceList.devices.FirstOrDefault(d => d.Guid == guid);
}
{
"result": [
{
"u_guid": "12345678",
"u_friendly_name": "DeviceA",
"sys_mod_count": "1",
"sys_updated_on": "2017-03-09 11:58:50",
"sys_tags": "",
"u_config_override": "log_level_local = 5",
"u_running_version": "1.0.0",
"sys_id": "abcdefg",
"sys_created_on": "2017-03-07 12:25:06",
"u_reference_record": "",
"u_status": "Provisioned",
"sys_created_by": "foo@bar.no"
},
{
"u_guid": "34567890",
"u_friendly_name": "DeviceB",
"sys_mod_count": "0",
"sys_updated_on": "2017-03-08 13:23:06",
"sys_tags": "",
"u_config_override": "",
"u_running_version": "",
"sys_id": "abcdefg",
"u_application": "",
"u_reference_record": "",
"u_status": "",
"sys_created_by": "foo@bar.no"
}
]
}