2009-12-21 4 views
6

일부 json을 컬렉션 (목록)으로 탈형하려고하지만 어떤 메서드가 개체 목록을 반환할지 모르거나 뭔가를 반복해서 내 ​​목록으로 복사해야합니까?Json.net에서 C# .net 2.0의 개체 목록에 deseralize

누구나 내가이 구문에 대해 사용해야하는 구문이나 방법을 말해 줄 수 있습니까?

일부 속성을 사용하여 개체를 만들었으므로 데이터를 보관하는 데 사용할 준비가되었습니다. (제목, URL, 설명)

나는이 시도했지만, 그것은

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

답변

5

당신이 도움보고 시도해 봤어?

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

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

아, 하, 감사, 내가 .. 문서를 통해보고 시도 않았다 이것을 시도 할 것이다, 그러나이를 찾을 수 없습니다. –

0

제네릭 목록 대신 배열을 사용하려고 꽤 잘 보이지 않는다. 이것은 도움이 될 수 있습니다.

1

내가 그 확장 방법을 사용하고 있습니다 : 당신처럼 객체를 장식 할 필요가

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