首页 > 解决方案 > 使用单独的列表和对象序列化 Json 文件

问题描述

我有一个带有 2 个字符串对象数组和一个字符串的 JSON 文件。我需要序列化它,所以我将有能力拥有 2 个不同的对象,每个对象都包含 JSON 文件中的 1 个对象,或者如果字符串是单个字符串,则列出第一个或最后一个成员。

我已经尝试过这里的解决方案,但它给了我错误。

using (StreamReader r = new StreamReader("Licensce.json")) {
    string json = r.ReadToEnd();
    List<string> items = JsonConvert.DeserializeObject<List<string>>(json);
}

Json 文件是这样的:

{
 "UsbDevices": [
     "SA",
     "SB",
     "SC",
     "SE2",
     "SF",
     "M",
 ] 
 "DeviceConnectivityExperationDateTime" : "2020-12-30"
}

错误是:

无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“System.Collections.Generic.List`1[System.String]”,因为该类型需要 JSON 数组(例如 [1,2, 3])正确反序列化。要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。

标签: c#jsonserialization

解决方案


检查您的 json 格式或与以下格式进行比较

 var json = @"{
               'UsbDevices': [
                            'SA',
                            'SB',
                            'SC',
                            'SE2',
                            'SF',
                            'M'],
               'DeviceConnectivityExperationDateTime' : '2020-12-30'
              }";                
                var items = JsonConvert.DeserializeObject<Data>(json);           
        }

public class Data
{
   public Data()
   {
      this.UsbDevices = new List<string>();
   }
   public List<string> UsbDevices { get; set; }
   public string DeviceConnectivityExperationDateTime { get; set; }
 }

推荐阅读