Как можно десериализовать строку JSON, используя JSON.NET, который использует пустые кавычки, а не ноль для поля - PullRequest
1 голос
/ 18 октября 2011

Я пытаюсь десериализовать некоторые комментарии reddit (возвращенные в JSON), используя JSON.NET.Я столкнулся с проблемой, когда в комментарии есть поле «Ответы», которое является либо другим объектом комментария, либо пустыми кавычками («»).Проблема заключается в том, что десериализатор JSON.NET генерирует исключение при десериализации поля, которое ожидает объект, но находит "" (как я ожидаю, оно ищет ноль, а не "").

Пример:

"data":{

"body":"We were being trolled. ",
"subreddit_id":"t5_2qh1i",
"author_flair_css_class":null,
"created":1318984933.0,
"author_flair_text":null,
"downs":1,
"author":"evange",
"created_utc":1318959733.0,
"body_html":"<div class=\"md\"><p>We were being trolled.</p></div>",
"levenshtein":null,
"link_id":"t3_lghhj",
"parent_id":"t3_lghhj",
"likes":null,
"replies":"",
"id":"c2shf1a",
"subreddit":"AskReddit",
"ups":6,
"name":"t1_c2shf1a"

   }

И затем это:

"data":{

    "body":"Dude, it was a Roll Troll. Forget it.",
    "subreddit_id":"t5_2qh1i",
    "author_flair_css_class":null,
    "created":1318985233.0,
    "author_flair_text":null,
    "downs":1,
    "author":"youngmonk",
    "created_utc":1318960033.0,
    "body_html":"<div class=\"md\"><p>Dude, it was a Roll Troll. Forget it.</p></div>",
    "levenshtein":null,
    "link_id":"t3_lghhj",
    "parent_id":"t3_lghhj",
    "likes":null,
    "replies":{
        "kind":"Listing",
        "data":{
            "modhash":"",
            "children":[....etc

Есть ли способ десериализации этого с помощью JSON.NET, или мне придется сделать RegEx для поиска "Ответов": ""изменить все эти пустые кавычки на ноль?

Спасибо!

1 Ответ

0 голосов
/ 19 октября 2011

Проблема здесь в том, что тип, связанный со свойством «ответы», является динамическим: это либо строка, либо объект JSON. Если вы используете .NET 4.0, вы должны использовать динамическое ключевое слово, чтобы отразить динамический характер данных. Если вы используете другую версию .NET, вы можете десериализовать ее в Newtonsoft.Json.Linq.JObject. Посмотрите здесь для примера. Желаем удачи.

...