现在我有了这个JSON:
[
"bekasi",
"bekasi barat",
"bekasi selatan",
"bekasi timur",
"bekasi utara",
"serang bekasi"
]
我不知道如何制作解析器类。我尝试了在线json到c#类生成器,但它无能为力。所以我尝试了这个:
[DataContract]
public class kota
{
[DataMember]
public string kotanya { get; set; }
}
和这个
public static kota eks; // I also tried public static kota[] eks;
public void mulai()
{
string eksp = "http://www.ongkoskirim.com/api/0.2/?id=OAL66afd139a386fee6dc5a5597abd7daba&q=city&s=bek";
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri(eksp), UriKind.Absolute);
}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
try
{
var ser = new DataContractJsonSerializer(typeof(kota)); //and I have tried typeof(IEnumerable<kota>)
System.Diagnostics.Debug.WriteLine("sini");
eks = (kota)ser.ReadObject(e.Result); //I also tried (kota[])ser.ReadObject(e.Result);
System.Diagnostics.Debug.WriteLine("sana");
List<string> temp = new List<string>();
temp.Add("Semua");
System.Diagnostics.Debug.WriteLine("list");
for (int i = 0; i < 3; i++)
{
System.Diagnostics.Debug.WriteLine(eks.kotanya[i]);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
System.Diagnostics.Debug.WriteLine(ex.StackTrace);
}
}
但我总是得到invalidCastException。任何人都可以帮助我吗?
答案 0 :(得分:1)
您不需要任何额外的类,因为您的JSON是简单的字符串数组:
var ser = new DataContractJsonSerializer(typeof(string[]));
var items = (string[]) ser.ReadObject(e.Result);
在您的JSON变得更复杂之前,我不会涉及专用类,但您可以轻松构建kota
个实例的列表:
var kotas = items.Select(i => new kota { kotanya = i }).ToList();
在旁注中,如果您计划进行更多JSON de /序列化,我建议您查看JSON.NET library。
答案 1 :(得分:0)
由于它是一个你要序列化的数组,你应该尝试这个
var ser = new DataContractJsonSerializer(typeof(kota[]));
答案 2 :(得分:0)
如果需要使用类,则必须通过将kota
属性更改为字符串集合和JSON字符串来修改kotanya
类(添加数据成员的名称{{ 1}}在处理之前描述字符串的集合并用kotanya
)包围字符串:
{}