سؤال

أحاول تحويل بعض JSON إلى مجموعة (قائمة) ، لكنني لست متأكدًا من الطريقة التي ستعيد قائمة الكائنات ، أو يجب عليّ أن أحلقها في شيء ونسخها إلى قائمتي الخاصة؟

هل يمكن لأي شخص أن يخبرني بناء الجملة أو الطريقة التي يجب أن أستخدمها لهذا.

لقد قمت بإنشاء كائني مع بعض الخصائص ، لذلك فهو جاهز لاستخدامه للاحتفاظ بالبيانات. (العنوان ، عنوان URL ، الوصف)

لقد جربت هذا ، لكن هذا لا يبدو صحيحًا تمامًا

 List<newsItem> test = (List<newsItem>)JsonConvert.DeserializeObject(Fulltext);
هل كانت مفيدة؟

المحلول

هل حاولت النظر في المساعدة؟

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

نصائح أخرى

أنا أستخدم طرق التمديد هذه:

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

حاول استخدام Array بدلاً من القائمة العامة. هذا قد يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top