Как декодировать кодированный HTML-код, встроенный в строку json - PullRequest
1 голос
/ 09 июля 2009

У меня небольшой вопрос о декодировании специальных символов из результата JSon (в моем случае \ x27, но это может быть любой допустимый кодированный в HTML символ). Если результат не содержит экранированных символов, он работает хорошо, но если нет, я получаю исключение нераспознанной escape-последовательности. Я пытаюсь сделать HttpUtility.HtmlDecode для строки Json перед десериализацией с использованием JavascriptSerializer, он не работает, символ все еще находится в закодированном формате.

Вот фрагмент кода:

public IEnumerable<QuoteInfo> ParseJson(string json)
{
    System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
    List<QuoteInfo> result = jss.Deserialize<List<QuoteInfo>>(System.Web.HttpUtility.HtmlDecode(json));
    return result;
}

Я пытался использовать RegistersConverters для HtmlDecode любой строки, которую мог найти во время десериализации, но я не могу понять, как правильно ее использовать.

Как я могу решить эту проблему?

Как хорошо объяснил back2dos, эта проблема была связана не с проблемой HtmlDecode, а с неправильно отформатированной строкой Json.

Ответы [ 2 ]

4 голосов
/ 09 июля 2009

хорошо, у меня очень поверхностные знания о C#, и ничего об API .NET нет, но интуитивно HtmlDecode должен декодировать HTML сущностей (прошу прощения, если я ошибаюсь в этом) ... кодирование довольно точное, я знаю, поэтому я постараюсь четко объяснить разницу между тем, что у вас есть, что вы пробовали и что должно работать. ..

правильный HTML сущность будет &#x27, а не \x27 ... \x27 является шестнадцатеричным ASCII escape- последовательность , принятая некоторыми JSON декодерами и многими языками программирования, но полностью не связана с HTML ...

а также, он не имеет ничего общего с JSON, что является проблемой ... Спецификации JSON для строк не разрешают шестнадцатеричный ASCII escape-последовательности , но only Unicode escape-последовательности , поэтому escape-последовательность не распознается и поэтому вместо нее должно работать \u0027. ... теперь вы можете вслепую заменить \x на \u00 (это должно прекрасно работать на , действителен JSON, хотя некоторые комментарии могут быть повреждены в теории, но кого это волнует ...: D)

но лично, если у вас есть доступ к источнику, вы должны изменить его, чтобы он вывел действительный JSON в соответствии со спецификациями ...

Greetz

back2dos

0 голосов
/ 09 июля 2009

Я не уверен, что понимаю требования, но вы можете попробовать взглянуть на System.Security.SecurityElement.Escape (это то, что я использую, я предполагаю, что есть эскейп, но сейчас у меня нет времени проверьте API, нужно идти на встречу)

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...