2015-11-10 3 views
1

У меня есть RequestDto, скажем, класса А DTO, он содержит само определенный тип недвижимости:ServiceStack Json десериализации incorrectely

// C# code 
public Class MyObject 
{ 
    public string A { get; set; } 
    public string B { get; set; } 
} 
public Class ADto 
{ 
    public List<MyObject> MO { get; set;} 
} 

Когда я пытаюсь отправить DTO с помощью JSON, выглядит объект JSon например:

{"MO":[{"A":"String","B":"a"},{"A":"String","B":"b"}]} 

, но объект, который я получаю, будет null. Однако если изменить строку JSON в:

{MO:[{A:"String",B:"a"},{A:"String",B:"b"}]} 

Я теряю кавычки по именам объектов, и это работает. Правильный формат Json должен включать эти кавычки правильно? Почему это происходит?

+0

Можете ли вы поделиться кодом, который используется для сериализации/сериализации? –

+0

Это стандартная библиотека для разных клиентов (iOS, Android). Я пробовал эту строку Json, используя Postman, результат такой, как описано. – gnaix

+0

Ваш класс говорит, что у вас есть два свойства, называемые A и B. Но ваш Json говорит, что у вас есть два свойства, называемые «Mobile» и «Name». Это не выглядит правильным. –

ответ

0

ServiceStack делает сериализацию и десериализует действительный JSON, который требует every property name to be quoted однако вы говорите, что текст ниже работы:

{MO:[{A:"String",B:"a"},{A:"String",B:"b"}]} 

Однако это недействительно. JSON, it instea d выглядит как ServiceStack's JSV Format

Вы не упомянули, где вы отправляете формат JSV или предоставили Raw HTTP Request (для нас это необходимо), но я предполагаю, что вы используете Postman (упомянутый в ваших комментариях), чем вы пытаетесь отправить JSON в ?QueryString, который не разрешен.

Но ServiceStack поддерживает отправку complex object graphs on the QueryString using JSV.

Поскольку вы отправляете сложный тип, который вы хотите либо POST запрос или как JSON или WWW-форм-urlencoded данных формы или, если вы хотите, чтобы передать его в QueryString вам нужно преобразовать это для JSV.

В будущем, пожалуйста, включите Raw HTTP Request, так как в этом вопросе отсутствует какой-либо контекст того, где вы меняете строку JSON, как вы пытаетесь использовать ее или что действительно отправляется, куда вы ее отправляете, и т. д., что не позволяет догадаться, в чем проблема.

+0

Спасибо, mythz. Прочитав ваш ответ, я понял, что не совсем понял, как данные отправляются через HTTP-запрос. Используя Postman для отправки данных, я могу выбрать использование форм-данных, x-www-form-urlenencoded или raw. Я думаю, что я должен отправить данные JSON в необработанный раздел.Вы правы в предоставлении Raw HTTP Request, но также я думаю, что причина, по которой мой вопрос был слишком расплывчатым, заключается в том, что я не совсем понял, что я делаю, я предположил, что отправка данных формы - это то же самое, что и отправка JSON. Еще раз спасибо. – gnaix

+1

Проблема решена. Это потому, что я отправляю запрос как данные формы, а не JSON. Хотелось бы, чтобы я смог проголосовать за ваш ответ, но я новичок, и мне еще не позволено отвечать на любой ответ. – gnaix

+0

@gnaix np рад, что я мог бы помочь :) вы все равно сможете принять ответы правильно? – mythz

0

Измените класс

public Class MyObject 
{ 
    public string Mobile { get; set; } 
    public string Name { get; set; } 
} 
public Class ADto 
{ 
    public List<MyObject> MO { get; set;} 
} 

Тогда ваш JSON должен быть

{MO:[{Mobile:"0556604",Name:"Peter"},{Mobile:"4565466",Name:"John"}]} 
+0

это недопустимо JSON, [каждое имя свойства должно быть указано] (http://www.json.org/); – mythz

+0

Да. Правильное форматирование было бы {«MO»: [{«Мобильный»: «0556604», «Имя»: «Питер»}, {«Мобильный»: «4565466», «Имя»: «Джон»}]} –

Смежные вопросы