Десериализация JSON в .NET, которую я не могу контролировать - PullRequest
0 голосов
/ 17 декабря 2010

Мне нужно десериализовать строки JSON, которые я не могу контролировать.Это крайний пример, но он имеет смысл:

string fooJson = @"
{
    'foo_baz': 123,
    foo_bar: 'buuuu',
    ""Xyz"": ""\/Date(405928800000-0600)\/"" //1982-11-12
}";

JSON должен быть десериализован в этот класс C #, который я не могу изменить:

public class Foo
{
    public string Bar { get; set; }

    public int Baz { get; private set; }

    public DateTime Xyz { get; set; }
}

Сериализация Foo не проблема.

После десериализации, результаты должны быть ...

  • Bar == "buuuu"
  • Baz ==123
  • Xyz == DateTime.MinValue или неинициализированный

... но у меня проблемы.

DataContractJsonSerializer вместе с * 1029Атрибуты * и DataMember в Foo и его членах в основном идеальны, за исключением того, что они ограничивают свойства JSON и строки, которые не заключены в двойные кавычки.

JavaScriptSerializer, кажется, обрабатывает нестандартное цитирование, но я не могу заставить его игнорировать Xyz или сопоставлять foo_baz с Baz и foo_bar с Bar.

Это будет частью распространяемой библиотеки классовПоэтому я стараюсь по возможности избегать сторонних инструментов, таких как JSON.NET.Однако, если нет встроенного способа сделать то, что мне нужно, я открыт для предложений сторонних инструментов.

1 Ответ

0 голосов
/ 17 декабря 2010

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

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

Эта часть не будет быстро закончена. Вам не понравится. Я не твой король.

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