0

我有一种情况,我将 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);

当我传递值列表并且它期望一个字符串作为参数时,我无法反序列化;我可以创建扩展方法还是有更简单的反序列化方法?

4

2 回答 2

2

您可以通过构建一个新的来将values列表转换为stringof ,如以下代码:ArrayJson

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

我希望这会帮助你。

于 2020-03-02T19:19:43.180 回答
1

试试这个:

            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;
    }

通用扩展

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>();
于 2020-03-02T19:19:09.320 回答