JSON.NET Despertalize para uma lista de objetos em C# .NET 2.0
Pergunta
Estou tentando deseralizar algum JSON em uma coleção (lista), mas não tenho certeza de qual método retornará uma lista de objetos ou tenho que percorrer algo e copiá -lo para minha própria lista?
Alguém pode me dizer a sintaxe ou método que eu deveria usar para isso.
Eu criei meu objeto com algumas propriedades, por isso está pronto para ser usado para manter os dados. (Título, URL, Descrição)
Eu tentei isso, mas não parece certo
List<newsItem> test = (List<newsItem>)JsonConvert.DeserializeObject(Fulltext);
Solução
Você tentou olhar para a ajuda?
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
Outras dicas
Estou usando esses métodos de extensão:
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;
}
}
Você precisa decorar seus objetos como este:
[DataContract]
public class MyJSONObject
{
[DataMember]
public int IntValue { get; set; }
[DataMember]
public string StringValue { get; set; }
}
Tente usar a matriz em vez da lista genérica. Isso pode ajudar.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow