我有第 3 方 Web api,它返回 json 响应,其中包含转义字符和许多反斜杠,如下所示。
我的目标是阅读所有服务组及其相关服务。即使使用了
replace
, regex
后我也无法使用。
{
"name": "servicesGroups",
"value": "[{\"id\":\"ServiceGroup1\",\"types\":[\"books\"],\"services\":[{\"id\":2,\"calendarId\":2,\"publicId\":\"1234567890\"},{\"id\":1,\"calendarId\":1,\"publicId\":\"0987654321\"}],\"names\":{\"en\":\"Service Group1\"}},{\"id\":\"ServiceGroup2\",\"types\":[\"books\"],\"services\":[{\"id\":2,\"calendarId\":2,\"publicId\":\"7575637576457457567\"},{\"id\":1,\"calendarId\":1,\"publicId\":\"2143658709\"}],\"names\":{\"en\":\"ServiceGroup2\"}}}]"
}
RootObject root = JsonConvert.DeserializeObject<RootObject>(servicegroupsjson);
List<ServicesGroup> servicesGroups = JsonConvert.DeserializeObject<List<ServicesGroup>>(root.value); - Compile time error
public class Service
{
public int id { get; set; }
public int calendarId { get; set; }
public string publicId { get; set; }
}
public class Names
{
public string en { get; set; }
}
public class ServicesGroup
{
public string id { get; set; }
public List<string> types { get; set; }
public List<Service> services { get; set; }
public Names names { get; set; }
}
public class RootObject
{
public string name { get; set; }
public List<ServicesGroup> value { get; set; }
}
您需要创建一个 List 实例并将其分配给 value。然后你可以使用 Newtonsoft.Json 反序列化该对象。
请参考以下代码:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
public class Service
{
public int Id { get; set; }
public int CalendarId { get; set; }
public string PublicId { get; set; }
}
public class ServiceGroup
{
public string Id { get; set; }
public List<string> Types { get; set; }
public List<Service> Services { get; set; }
public Names Names { get; set; }
}
public class Names
{
[JsonProperty("en")]
public string English { get; set; }
}
public class ApiResponse
{
public string Name { get; set; }
public string Value { get; set; }
public List<ServiceGroup> ServicesGroups { get; set; } = new List<ServiceGroup> ();
}
class Program
{
static void Main()
{
string jsonResponse = @"{
""name"": ""servicesGroups"",
""value"": ""[
{\""id\"":\""ServiceGroup1\"",\""types\"":[\""books\""],\""services\"":[{\""id\"":2,\""calendarId\"":2,\""publicId\"":\""1234567890\""},{\""id\"":1,\""calendarId\"":1,\""publicId\"":\""0987654321\""}],\""names\"":{\""en\"":\""Service Group1\""}},
{\""id\"":\""ServiceGroup2\"",\""types\"":[\""books\""],\""services\"":[{\""id\"":2,\""calendarId\"":2,\""publicId\"":\""7575637576457457567\""} ,{\""id\"":1,\""calendarId\"":1,\""publicId\"":\""2143658709\""}],\""names\"":{\""en\"":\""ServiceGroup2\""}}
]""
}";
ApiResponse apiResponse = JsonConvert.DeserializeObject<ApiResponse>(jsonResponse);
Console.WriteLine($"Name: {apiResponse.Name}");
Console.WriteLine($"Value: {apiResponse.Value}");
foreach (var serviceGroup in apiResponse.ServicesGroups)
{
Console.WriteLine($"ServiceGroup ID: {serviceGroup.Id}, English Name: {serviceGroup.Names?.English}");
foreach (var service in serviceGroup.Services)
{
Console.WriteLine($" Service ID: {service.Id}, Calendar ID: {service.CalendarId}, Public ID: {service.PublicId}");
}
}
}
}
工作.Netfiddle 这里