【问题标题】:Convert json response to list将 json 响应转换为列表
【发布时间】:2016-05-26 13:07:05
【问题描述】:

我向正在使用的 api 发出请求,这是我得到的响应。

{ "id": 1139, "performanceStatus": "OK", "availabilityStatus": "OK" }

我想将此响应转换为一个列表,然后我可以使用 for/foreach 循环,然后可以使用 linq 和 SelectMany 创建一个全新的列表。

我已经走到这一步了,但我卡住了代码没有点击 var "newJson"..

谁能帮帮我?

var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
dynamic parsedJson = JObject.Parse(json);
    foreach (var j in parsedJson)
    {
        j.Replace(JObject.FromObject(
        new {
            id = j.id,
            performance = j.performanceStatus,
            availability = j.availabilityStatus
            }));
    }

var newJson = parsedJson.ToString();

稍后我想将其反序列化为强类型类。像这样

boi = await Task.Run(() => JsonConvert.DeserializeObject<Boi>(newJson)).ConfigureAwait(false);

这里是强类型类

public class Boi
    {
        public int Id { get; set; }

        public string PerformanceStatus { get; set; }

        public string AvailabilityStatus { get; set; }
    }

    public class NewBoi
    { 
        public List<Boi> eeg { get; set; }
    }

【问题讨论】:

    标签: c# json linq json.net deserialization


    【解决方案1】:

    你可以这样做:

            var jsn = "{ \"id\": 1139, \"performanceStatus\": \"OK\", \"availabilityStatus\": \"OK\" }";
            var bois = new List<Boi> { JsonConvert.DeserializeObject<Boi>(jsn) };
    
            var newBoi = new NewBoi() { eeg = bois };
    

    虽然我会质疑 NewBoi 类的必要性 - 你可以只使用 List。

    【讨论】:

    • 感谢您的快速回复。您对 NewBoi 课程是正确的,它没有用:)
    【解决方案2】:

    要反序列化为众所周知的类型,请使用

    JsonConvert.Deserialize<T>(jsonString,new JsonSerializerSettings
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver()
    });
    

    其中 T 是您熟知的类型。

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2020-03-20
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多