Json.net десерализуется в список объектов в c # .net 2.0 - PullRequest
6 голосов
/ 21 декабря 2009

Я пытаюсь десерализовать некоторые json в коллекцию (список), но я не уверен, какой метод вернет список объектов, или мне нужно что-то перебрать и скопировать его в мой собственный список?

Может кто-нибудь сказать мне синтаксис или метод, который я должен использовать для этого.

Я создал свой объект с некоторыми свойствами, поэтому он готов к использованию для хранения данных. (Название, адрес, описание)

Я пробовал это, но это не совсем правильно

 List<newsItem> test = (List<newsItem>)JsonConvert.DeserializeObject(Fulltext);

Ответы [ 3 ]

5 голосов
/ 26 декабря 2009

Вы пытались посмотреть на помощь?

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
1 голос
/ 21 декабря 2009

Я использую эти методы расширения:

    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; }
}
0 голосов
/ 21 декабря 2009

попробуйте использовать массив вместо общего списка.это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...