C# Десериализация / конвертация json в класс
Есть json строка вида:
Код:
{
"status": "ok",
"posts": [
{
"id": 3771,
...
"title": "Оригинальные настенные часы своими руками",
"date": "2014-12-30 11:05:45",
"categories": [
{
"id": 12,
"slug": "%d0%b4%d0%bb%d1%8f-%d0%b4%d0%be%d0%bc%d0%b0",
"title": "Для дома",
"description": "Для дома. Все для дома своими руками",
"parent": 0,
"post_count": 10
},
{
"id": 4,
"slug": "%d1%81%d0%b2%d0%be%d0%b8%d0%bc%d0%b8-%d1%80%d1%83%d0%ba%d0%b0%d0%bc%d0%b8",
"title": "Своими руками",
"description": "Своими руками",
"parent": 0,
"post_count": 33
}
],
...
"status": "ok",
"posts": [
{
"id": 3771,
...
"title": "Оригинальные настенные часы своими руками",
"date": "2014-12-30 11:05:45",
"categories": [
{
"id": 12,
"slug": "%d0%b4%d0%bb%d1%8f-%d0%b4%d0%be%d0%bc%d0%b0",
"title": "Для дома",
"description": "Для дома. Все для дома своими руками",
"parent": 0,
"post_count": 10
},
{
"id": 4,
"slug": "%d1%81%d0%b2%d0%be%d0%b8%d0%bc%d0%b8-%d1%80%d1%83%d0%ba%d0%b0%d0%bc%d0%b8",
"title": "Своими руками",
"description": "Своими руками",
"parent": 0,
"post_count": 33
}
],
...
Код:
public class Post
{
public int id { get; set; }
...
public string title { get; set; }
public List<Category> categories { get; set; }
}
public class Category
{
public int id { get; set; }
public string slug { get; set; }
public string title { get; set; }
public string description { get; set; }
public int parent { get; set; }
public int post_count { get; set; }
}
{
public int id { get; set; }
...
public string title { get; set; }
public List<Category> categories { get; set; }
}
public class Category
{
public int id { get; set; }
public string slug { get; set; }
public string title { get; set; }
public string description { get; set; }
public int parent { get; set; }
public int post_count { get; set; }
}
Код:
Post rF = (Post)new JavaScriptSerializer().Deserialize<Post>(responseFromServer);
Пытался что то типа:
Код:
foreach(Category cat in rF.categories)
{
...
}
{
...
}
попробуйте сделать сериализацию для начала, посмотрите что получается, от этого уже пляшите в обратном направлении. А вообще в режиме отладчик проверить все можно :)
Цитата: cronya
попробуйте сделать сериализацию для начала, посмотрите что получается, от этого уже пляшите в обратном направлении. А вообще в режиме отладчик проверить все можно :)
Json и так сериализован, приходит в виде "{"status":"ok","count":1,"count_total":56,"pages":56,"posts":[{"id":3771,"type":"post","slug":"%d0%be%d1%80%d0%b8%d0%b3%d0%b8%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%bd%d0%b0%d1%81%d1%82%d0%b5%d0%bd%d0%bd%..."
Я просто воспользовался сервисом для удобства читаемости json строки.
Код:
Post rF = (Post)new JavaScriptSerializer().Deserialize<Post>(responseFromServer);
Цитата: cronya
я же вроде написал про отладчик, проверьте, почему у вас нули приходят, вероятность того что ваша изначальная структура заполнена нулями вот и следующая реакция.
и это явно не полный парсинг, судить сложно что у вас в responseFromServer храниться.
Код:
Post rF = (Post)new JavaScriptSerializer().Deserialize<Post>(responseFromServer);
Да, извините, приводил не к тому классу.
Код:
[Serializable]
public class Post
{
public int id { get; set; }
public string title { get; set; }
public List<Category> categories { get; set; }
};
[Serializable]
public class Category
{
public int id { get; set; }
public string slug { get; set; }
public string title { get; set; }
public string description { get; set; }
public int parent { get; set; }
public int post_count { get; set; }
};
private void Form1_Load(object sender, EventArgs e)
{
var RegisteredUsers = new List<Post>();
RegisteredUsers.Add(new Post() { id = 1, title = "1", categories = new List<Category>() });
for (int idx=0; idx<9; idx++)
{
var mCat = new Category() { id = idx, slug = idx.ToString(), title = idx.ToString(), description = idx.ToString(),
parent = idx, post_count = idx };
RegisteredUsers[0].categories.Add(mCat);
}
var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(RegisteredUsers);
var deserializedResult = serializer.Deserialize<List<Post>>(serializedResult);
}
public class Post
{
public int id { get; set; }
public string title { get; set; }
public List<Category> categories { get; set; }
};
[Serializable]
public class Category
{
public int id { get; set; }
public string slug { get; set; }
public string title { get; set; }
public string description { get; set; }
public int parent { get; set; }
public int post_count { get; set; }
};
private void Form1_Load(object sender, EventArgs e)
{
var RegisteredUsers = new List<Post>();
RegisteredUsers.Add(new Post() { id = 1, title = "1", categories = new List<Category>() });
for (int idx=0; idx<9; idx++)
{
var mCat = new Category() { id = idx, slug = idx.ToString(), title = idx.ToString(), description = idx.ToString(),
parent = idx, post_count = idx };
RegisteredUsers[0].categories.Add(mCat);
}
var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(RegisteredUsers);
var deserializedResult = serializer.Deserialize<List<Post>>(serializedResult);
}
можно возпользоваться такой лабудой для парсинга файлов через Json Json.net