Метод расширения для JSONConvert.Deserilize для коллекции значений объекта JSON - PullRequest
0 голосов
/ 02 марта 2020

У меня есть ситуация, когда у меня есть Json Значения в виде списка строк.

List<string> values = new List<string>()
{
    "{\"Id\":\"SC\",\"Value\":8563}",
    "{\"Id\":\"SC\",\"Value\":8563}",
    "{\"Id\":\"SC\",\"Value\":8563}"
};

Как десериализовать в список объектов:

public class ClassA
{
   public string Id {get; set;}
   public int Value {get;set;}
}

var objectValues = JsonConvert.DeserializeObject<IEnumerable<ClassA>>(values);

I Не удалось десериализовать, когда я передаю список значений, и он ожидает строку в качестве параметра, какую-либо помощь при создании метода расширения или более простой способ десериализации?

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Вы можете преобразовать список values в string из Array, создав новый Json, как показано в следующем коде:

var objectValues = JsonConvert.DeserializeObject<IEnumerable<ClassA>>($"[{string.Join(",", values)}]");

Надеюсь, это поможет вам.

1 голос
/ 02 марта 2020

Попробуйте:

            List<ClassA> deserialized = new List<ClassA>();
            List<string> values = new List<string>()
            {   
                "{\"Id\":\"SC\",\"Value\":8563}",
                "{\"Id\":\"SC\",\"Value\":8563}",
                "{\"Id\":\"SC\",\"Value\":8563}"
            };
            foreach (var item in values)
            {
                var objectValue = JsonConvert.DeserializeObject<ClassA>(item);
                deserialized.Add(objectValue);
            }

И как расширение:

 public static List<ClassA> ToClassA(this List<string> stringList)
    {
        List<ClassA> deserialized = new List<ClassA>();
        foreach (var item in stringList)
        {
            var objectValue = JsonConvert.DeserializeObject<ClassA>(item);
            deserialized.Add(objectValue);
        }
        return deserialized;
    }

Generi c расширение

public static List<T> ToList<T>(this List<string> stringList) where T : class
        {
            List<T> deserialized = new List<T>();
            foreach (var item in stringList)
            {
                var objectValue = JsonConvert.DeserializeObject<T>(item);
                deserialized.Add(objectValue);
            }
            return deserialized;
        }

использование:

var result = values.ToList<ClassA>();
...