我正在尝试访问 API 并通过邮递员获得以下响应正文:
{
"Name": "wangxiaoer",
"Created": "2018-01-26T01:28:19.0388857Z",
"Modified": "2019-06-18T03:46:52.4350569Z",
"AdminSecurityGroups": "mhanch;sastrys;vinala;vballa",
"DeveloperOwner": "sastrys;vballa",
"ProgramManagerOwner": "sastrys",
"Comments": null
}
我使用了以下代码:
var content = await httpResponse.Content.ReadAsStringAsync();
获取响应体
我想将此内容反序列化为如下所示的自定义对象:
class MyObject
{
public string Name{get;set}
[JsonProperty(PropertyName = "AdminSecurityGroups")]
public List<String> Admins { get; set; }
[JsonProperty(PropertyName = "DeveloperOwner")]
public List<String> DevOwner { get; set; }
[JsonProperty(PropertyName = "ProgramManagerOwner")]
public List<String> PMOwner { get; set; }
}
由于响应内容为我提供了每个字符串,这些字符串通过用 ';' 分割而由多个人的别名组成。对于 AdminSecurityGroups、DeveloperOwner、ProgramManagerOwner,因此最好将每个字符串转换为列表以便以后重用。我试图在对象中定义一个列表,而不是使用 String 来存储这些部分中的每一个,但是当我使用
MyObject my = JsonConvert.DeserializeObject<MyObject>(content);
它抛出异常。有没有办法在使用c#解析json字符串时实现将字符串转换为列表。例如:
"AdminSecurityGroups": "mhanch;sastrys;vinala;vballa"
它通过拆分包含 4 个人;什么时候得到响应字符串。需要将其解析为列表。
你可以通过多种方式做到这一点,
规范化你的 json,json 有数组....
反序列化为字符串,然后使用另一个属性将其拆分,或映射到另一个属性。
只需使用专为此类情况而设计的转换器
JSON.Net
public class MyObject
{
public string Name{get; set; }
[JsonProperty( "AdminSecurityGroups")]
[JsonConverter(typeof(MyFunkConverter))]
public List<string> Admins { get; set; }
[JsonProperty( "DeveloperOwner")]
[JsonConverter(typeof(MyFunkConverter))]
public List<string> DevOwner { get; set; }
[JsonProperty( "ProgramManagerOwner")]
[JsonConverter(typeof(MyFunkConverter))]
public List<string> PMOwner { get; set; }
}
public class MyFunkConverter : JsonConverter<List<string>>
{
public override void WriteJson(JsonWriter writer, List<string> value, JsonSerializer serializer)
=> throw new NotImplementedException();
public override List<string> ReadJson(JsonReader reader, Type objectType, List<string> existingValue, bool hasExistingValue, JsonSerializer serializer) =>
reader.Value.ToString().Split(';').ToList();
}
...
var result = JsonConvert.DeserializeObject<MyObject>(input);
文本.Json
public class MyObject
{
public string Name{get; set; }
[JsonPropertyName("AdminSecurityGroups")]
[JsonConverter(typeof(MyFunkConverter))]
public List<string> Admins { get; set; }
[JsonPropertyName("DeveloperOwner")]
[JsonConverter(typeof(MyFunkConverter))]
public List<string> DevOwner { get; set; }
[JsonPropertyName( "ProgramManagerOwner")]
[JsonConverter(typeof(MyFunkConverter))]
public List<string> PMOwner { get; set; }
}
public class MyFunkConverter : System.Text.Json.Serialization.JsonConverter<List<string>>
{
public override List<string>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> reader.GetString().Split(';').ToList();
public override void Write(Utf8JsonWriter writer, List<string> value, JsonSerializerOptions options)
=> throw new NotImplementedException();
}
...
var result = JsonSerializer.Deserialize<MyObject>(input);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句