使用实体 c# 在 JsonConvert.DeserializeObject 之后订购项目 - 无法隐式转换类型 'System.Collections.Generic.List

order items after JsonConvert.DeserializeObject using entity c# - Cannot implicitly convert type 'System.Collections.Generic.List

我从 API 得到一个结果,然后反序列化它,我想对 JSON 进行排序,但它不起作用并给我一个错误:无法隐式转换类型 'System.Collections.Generic.List...

我的 API :

 public async Task<Root_SDL> ValidateScenario(string SDL_text)
        {


            try
            {
                // Api Config
                var ApiPath = "something here";
                var SDL_version = "something here";
                // var SDL_text = something here;
                HttpClient httpClient_ = new HttpClient();
                var Keys = new List<KeyValuePair<string, string>>();
                Keys.Add(new KeyValuePair<string, string>("something here", SDL_version));
                Keys.Add(new KeyValuePair<string, string>("something here", SDL_text));
                var ApiRequest = new HttpRequestMessage(HttpMethod.Get, ApiPath) { Content = new FormUrlEncodedContent(Keys) };
                HttpResponseMessage ApiResponse = await httpClient_.SendAsync(ApiRequest);
                var responseString_ApiSDL = await ApiResponse.Content.ReadAsStringAsync();
                // ParserIssuesToJS = responseString_ApiSDL;
                
                var APIstatusCode = ApiResponse.StatusCode;

                // API Deserialize
              Root_SDL  SDL = JsonConvert.DeserializeObject<Root_SDL>(responseString_ApiSDL);
                var test = (from c in SDL.issues select c)
                .Select(x => new
                
                {
                        x.description,
                        x.columnStart,
                        x.columnEnd,
                        x.lineStart,
                        x.lineEnd

                }
                )
                .OrderBy(x=>x.columnStart)
                .ToList()
                
                
                
                ;
              
                return test ; // here is the error (when I return SDL it works well but if I put 'test' that I miss a case or something)

            }
            catch (System.Exception)
            {

                throw;
            }

        }

下面是我的json。我需要它的 'passed' 值以及问题数组

{
    "Name": "something here",
    "passed": false,
    "issues": [
        {
            "description": "something here",
            "lineStart": 13,
            "lineEnd": 13,
            "columnStart": 4,
            "columnEnd": 10
        },
        {
            "description": "something here",
            "lineStart": 14,
            "lineEnd": 14,
            "columnStart": 30,
            "columnEnd": 31
        },
        {
            "description": "something here",
            "lineStart": 15,
            "lineEnd": 15,
            "columnStart": 29,
            "columnEnd": 30
        },
        {
            "description": "mismatched input '.' expecting ':'",
            "lineStart": 15,
            "lineEnd": 15,
            "columnStart": 36,
            "columnEnd": 37
        },
        {
            "description": "something here",
            "lineStart": 14,
            "lineEnd": 14,
            "columnStart": 28,
            "columnEnd": 30
        },
        {
            "description": "something here",
            "lineStart": 15,
            "lineEnd": 15,
            "columnStart": 27,
            "columnEnd": 29
        },
        {
            "description": "something here",
            "lineStart": 15,
            "lineEnd": 15,
            "columnStart": 34,
            "columnEnd": 36
        }
    ]
}


我想按columnStart

排序

下面是我的Root_SDLclass


public class Root_SDL
        {
            public string? fileName { get; set; }    
            public bool passed { get; set; }
            public string? parsingStartTime { get; set; }
            public string? parsingEndTime { get; set; }
            public List<Issue>? issues { get; set; }
            public List<string>? debug { get; set; }
        }

你 return 的这部分代码将不是 Root_SDL 的类型,如果你想 return 与你的 return 类型不匹配你的方法。

var test = (from c in SDL.issues select c)
            .Select(x => new
            
            {
                    x.description,
                    x.columnStart,
                    x.columnEnd,
                    x.lineStart,
                    x.lineEnd

            }).OrderBy(x=>x.columnStart).ToList()

根据你的问题,你只能 order by 发布集合并直接,这可能只会对 issues 进行排序,但会保留 SDL

中的原始 属性
Root_SDL SDL = JsonConvert.DeserializeObject<Root_SDL>(responseString_ApiSDL);
SDL.issues = SDL.issues.OrderBy(x=> x.columnStart).ToList();
return SDL;

c# online