У меня есть следующие модели:
class CheckResponse
{
public ICollection<CheckModel> Checks { get; set; }
}
public class CheckModel
{
[JsonConverter(typeof(StringEnumConverter))]
public CheckCodes CheckCode { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public ResultCode ResultCode { get; set; }
}
public enum CheckCodes
{
FirstCheck,
SecondCheck,
ThirdCheck,
}
public enum ResultCode
{
Failure,
Success,
Warning
}
Мне нужно конвертировать Checks
в CheckList
:
class CheckList
{
[JsonProperty(nameof(CheckCodes.FirstCheck))]
public bool FirstCheckPassed { get; set; }
[JsonProperty(nameof(CheckCodes.SecondCheck))]
public bool SecondCheckPassed { get; set; }
[JsonProperty(nameof(CheckCodes.ThirdCheck))]
public bool ThirdCheckPassed { get; set; }
}
Пример:
class Program
{
static void Main(string[] args)
{
var response = GetResponse();
var checkResponse = JsonConvert.DeserializeObject<CheckResponse>(response);
// var checkList = ?
}
static string GetResponse() => @"{
'checks': [
{
'checkCode': 0,
'resultCode': 1
},
{
'checkCode': 1,
'resultCode': 2
},
{
'checkCode': 2,
'resultCode': 0
}
]}";
}
Если resultCode
равно 2 (ResultCode.Warning
), то проверка должна быть пройдена.
Итак, checkList
должен иметь следующие значения свойств:
FirstCheckPassed = true
SecondCheckPassed = true
ThirdCheckPassed = false
ОБНОВЛЕНО:
Мое решение выглядит следующим образом:
static void Main(string[] args)
{
Test();
}
static IEnumerable<string> Yield(ICollection<CheckModel> checks)
{
foreach (var check in checks)
{
var success = check.ResultCode == ResultCode.Success || check.ResultCode == ResultCode.Warning;
yield return "'" + check.CheckCode.ToString() + "': '" + success.ToString() + "'";
}
}
static void Test()
{
var response = GetResponse();
var checkResponse = JsonConvert.DeserializeObject<CheckResponse>(response);
var o = "{" + string.Join(",", Yield(checkResponse.Checks)) + "}";
var checkList = JsonConvert.DeserializeObject<CheckList>(o);
}
Но я не уверен, что это лучший (на самом деле, я считаю это немного уродливым). Есть ли лучшие подходы?