Klien saya mengirimi saya objek seperti ini:

"content": {
    "title": "data title",
    "values": {
        "25": "some description",
        "26": "some info",
        "27": "some text",
        "28": "some other data",
        "29": "more info",
        "30": "more text",
        "31": "and another more description"
    }
}

Dan saya perlu menyimpan values pada objek C# List<>. Saya mencoba mendapatkan dan menyimpan nilai-nilai itu seperti ini:

public static List<MyKeyValuePair> GetClientValues(dynamic content)
{
    var myList = new List<MyKeyValuePair>();

    try
    {
        foreach (PropertyInfo pi in content.values.GetType().GetProperties())
        {
            var value = "";
            myList.Add(new MyKeyValuePair() { Id = int.Parse(pi.Name), Description = pi.GetValue(value, null).ToString() });
        }
    }
    catch { }   

    return myList;
}

Namun pada baris foreach saya mendapatkan pesan kesalahan ini:

'System.Collections.Generic.Dictionary.values' tidak dapat diakses karena tingkat perlindungannya

Bagaimana saya bisa memecahkan masalah ini?

1
Ninita 16 Agustus 2017, 20:08

2 jawaban

Jawaban Terbaik

Jika dinamis sudah diketik, Anda harus dapat melakukan hal berikut:

public static List<MyKeyValuePair> GetClientValues(dynamic content)
{
    var myList = new List<MyKeyValuePair>();

    foreach (var kv in content["values"])
    {
        myList.Add(new MyKeyValuePair {
            Id = int.Parse(kv.Key),
            Description = kv.Value
        });
    }

    return myList;
}

Jika tidak, Anda mungkin perlu melakukan deserialize string json input.

3
styfle 16 Agustus 2017, 17:45

Jika Anda menggunakan visual studio 2013 dan yang lebih baru, Anda menyalin json ini dan membuat kelas darinya menggunakan tempel json sebagai kelas di bawah menu edit, namun jika Anda menggunakan versi VS yang lebih rendah, Anda masih dapat mengetikkan struktur kelas dan maka langkah selanjutnya adalah menggunakan newtonsoft json untuk deserialise json ke dalam kelas yang dibuat di atas.

0
aditya 16 Agustus 2017, 17:24