У меня есть ответ JSON из Facebook Graph API, который выглядит следующим образом:десериализация более сложный JSON с DataContractJsonSerializer
{
"name": "XXXXXX YYYYYYY",
"username": "XXXXXX.YYYYYYY",
"email": "[email protected]",
"location": {
"id": "110507998976900",
"name": "Someplace, Somestate"
},
"work": [
{
"employer": {
"id": "4647647894784698",
"name": "Some Employer"
},
"location": {
"id": "7489468976968988",
"name": "Someplace, Somestate"
},
"position": {
"id": "4876498697859795",
"name": "Boss"
},
"start_date": "0000-00"
}
],
"id": "1895789769789679",
"picture": {
"data": {
"url": "https://fbcdn-aaaaaaa.net/aaaaaaaa/458768_484784776868_4875876876_q.jpg",
"is_silhouette": false
}
}
Я унаследовал код, который десериализует ответ, но я добавил более сложные поля, как место, работа и изображение в запрос, и теперь десериализатор JSON вызывает ошибку.
У меня есть класс-оболочку, которая использует DataContractJsonSerializer.ReadObject(), и класс контракта данных, выглядит следующим образом:
[DataContract]
public class FacebookMe
{
private string fbId;
[DataMember]
public string id
{
get { return fbId; }
set { fbId = value; }
}
...
Я попытался добавить поле «работа» первой в строке, (это когда ошибки начались), затем в качестве словаря. До сих пор мне не везло, и у меня заканчиваются идеи. Любые предложения?
EDIT:
С тех пор я продвинулся немного. Я создал классы внутри классов, чтобы имитировать структуру нотации JSON:
[DataContract]
public class Work
{
[DataContract]
public class Employer
{
private string fbEmployerName;
[DataMember]
public string name
{
get { return fbEmployerName; }
set { fbEmployerName = value; }
}
}
private Employer fbEmployer;
[DataMember]
public Employer employer
{
get { return fbEmployer; }
set { fbEmployer = value; }
}
[DataContract]
public class Position
{
private string fbPositionName;
[DataMember]
public string name
{
get { return fbPositionName; }
set { fbPositionName = value; }
}
}
private Position fbPosition;
[DataMember]
public Position position
{
get { return fbPosition; }
set { fbPosition = value; }
}
}
private Work fbWork;
[DataMember]
public Work work
{
get { return fbWork; }
set { fbWork = value; }
}
[DataContract]
public class Picture
{
[DataContract]
public class Data
{
private string fbPictureUrl;
[DataMember]
public string url
{
get { return fbPictureUrl; }
set { fbPictureUrl = value; }
}
private bool fbPictureIsSilhouette;
[DataMember]
public bool is_silhouette
{
get { return fbPictureIsSilhouette; }
set { fbPictureIsSilhouette = value; }
}
}
private Data fbPictureData;
[DataMember]
public Data data
{
get { return fbPictureData; }
set { fbPictureData = value; }
}
}
private Picture fbPicture;
[DataMember]
public Picture picture
{
get { return fbPicture; }
set { fbPicture = value; }
}
}
Это приводит к заполнению всех полей правильно (и ошибка десериализации ушла) для элемента «работы» За исключением. «работа» заполняется объектом, у которого есть поля «работодатель» и «позиция», которые являются нулевыми. «работа» имеет тот же уровень вложенных данных, что и «картинка», а «картинка» работает просто отлично. Я обрабатывал их одинаково. Но один работает, а другой - нет. Они только различие, которое я мог заметить в оригинальном формате JSON:
work [ {...} ]
picture {...}
«работа» имеет такие дополнительные скобки. Есть идеи, как с этим бороться?
какая ошибка? и показать больше кода в DataContract. – Cybermaxs
некоторая ошибка сериализации. Я уже избавился от этого. Я обновил свой вопрос. – Shaggydog