代码之家  ›  专栏  ›  技术社区  ›  Chris Barry

json.net反序列化为c.net 2.0中的对象列表

  •  6
  • Chris Barry  · 技术社区  · 15 年前

    我正试图将一些json反序列化为一个集合(列表),但我不确定哪个方法将返回一个对象列表,或者我必须循环某些内容并将其复制到我自己的列表中?

    有人能告诉我应该用什么语法或方法来做这个吗?

    我已经用一些属性创建了我的对象,所以它可以用来保存数据。(标题、URL、说明)

    我试过了,但似乎不对

     List<newsItem> test = (List<newsItem>)JsonConvert.DeserializeObject(Fulltext);
    
    3 回复  |  直到 11 年前
        1
  •  5
  •   Brian Rogers    11 年前

    你有没有试着找人帮忙?

    http://james.newtonking.com/json/help/?topic=html/SerializingCollections.htm

    string json = @"[
      {
        ""Name"": ""Product 1"",
        ""ExpiryDate"": ""\/Date(978048000000)\/"",
        ""Price"": 99.95,
        ""Sizes"": null
      },
      {
        ""Name"": ""Product 2"",
        ""ExpiryDate"": ""\/Date(1248998400000)\/"",
        ""Price"": 12.50,
        ""Sizes"": null
      }
    ]";
    
    List<Product> products = JsonConvert.DeserializeObject<List<Product>>(json);
    
    Console.WriteLine(products.Count);
    // 2
    
    Product p1 = products[0];
    
    Console.WriteLine(p1.Name);
    // Product 1
    
        2
  •  1
  •   Arthur    15 年前

    我正在使用这些扩展方法:

        public static string ToJSONArray<T>(this IEnumerable<T> list)
        {
            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(IEnumerable<T>));
            MemoryStream ms = new MemoryStream();
            s.WriteObject(ms, list);
            return GetEncoder().GetString(ms.ToArray());
        }
    
        public static IEnumerable<T> FromJSONArray<T>(this string jsonArray)
        {
            if (string.IsNullOrEmpty(jsonArray)) return new List<T>();
    
            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(IEnumerable<T>));
            MemoryStream ms = new MemoryStream(GetEncoder().GetBytes(jsonArray));
            var result = (IEnumerable<T>)s.ReadObject(ms);
            if (result == null)
            {
                return new List<T>();
            }
            else
            {
                return result;
            }
        }
    

    你需要像这样装饰你的物品:

    [DataContract]
    public class MyJSONObject
    {
        [DataMember]
        public int IntValue { get; set; }
        [DataMember]
        public string StringValue { get; set; }
    }
    
        3
  •  0
  •   Ozan BAYRAM    15 年前

    尝试使用数组而不是泛型列表。这可能会有帮助。