2014-02-03 3 views
1

Мы находимся в процессе перехода от servicestack 3 до 4.Должны ли быть внесены изменения в мои ответы, чтобы правильно сериализовать JSON в ServiceStack 4? объекты отлично работали в 3.9

Я получил все конвертируется снова и перестроен, основное тестирование показало, что мои ответы посылаются как пустые объекты в JSON, но этот XML был полностью заселен.

Все мои ответы наследуют базовый класс ответа, который выглядит, как этот

[Serializable] 
public class ResponseBase 
{   
    public string RequestTime { get; set; } 
    public string ResponseTime { get; set; } 
    public DtoBase[] Data { get; set; } 
    public int Total { get; set; } 
} 

Пробу я в настоящее время тестирования имеет следующий соответствующий код:

[Serializable] 
public class CatalogDto : DtoBase 
{   

    public long CatalogId { get; set; } 
    public string CatalogName { get; set; } 
    public string DisplayName { get; set; } 
} 

[Serializable] 
public class CatalogsListResponse : ResponseBase 
{ 
    public new CatalogDto[] Data { get; set; } 
} 

[Serializable] 
public class DtoBase 
{ 
} 

Если я называю эту услугу с форматом = xml Я получаю ожидаемый результат. Если я изменю формат на json или jsv, я получу пустой объект.

XML

<?xml version="1.0" encoding="utf-8" ?> 
<CatalogsListResponse> 
<Alerts i:nil="true" /> 
<Customizations i:nil="true" /> 
<Data i:nil="true" /> 
<Error i:nil="true" /> 
<Errors i:nil="true" /> 
<Infos i:nil="true" /> 
<RequestTime>2014-02-03T21:20:06.2704142Z</RequestTime> 
<ResponseTime>2014-02-03T21:20:06.2784216Z</ResponseTime> 
<Total>4</Total> 
<Warnings i:nil="true" /> 
<_x003C_Data_x003E_k__BackingField> 
<d2p1:CatalogDto> 
<d2p1:_x003C_CatalogId_x003E_k__BackingField>1</d2p1:_x003C_CatalogId_x003E_k__BackingField> 
<d2p1:_x003C_CatalogName_x003E_k__BackingField>Classic U.S. Coins</d2p1:_x003C_CatalogName_x003E_k__BackingField> 
<d2p1:_x003C_DisplayName_x003E_k__BackingField>Coin</d2p1:_x003C_DisplayName_x003E_k__BackingField> 
</d2p1:CatalogDto> 
<d2p1:CatalogDto> 
<d2p1:_x003C_CatalogId_x003E_k__BackingField>7</d2p1:_x003C_CatalogId_x003E_k__BackingField> 
<d2p1:_x003C_CatalogName_x003E_k__BackingField>Modern U.S. Coins</d2p1:_x003C_CatalogName_x003E_k__BackingField> 
<d2p1:_x003C_DisplayName_x003E_k__BackingField>Coin</d2p1:_x003C_DisplayName_x003E_k__BackingField> 
</d2p1:CatalogDto> 
<d2p1:CatalogDto> 
<d2p1:_x003C_CatalogId_x003E_k__BackingField>2</d2p1:_x003C_CatalogId_x003E_k__BackingField> 
<d2p1:_x003C_CatalogName_x003E_k__BackingField>U.S. Currency</d2p1:_x003C_CatalogName_x003E_k__BackingField> 
<d2p1:_x003C_DisplayName_x003E_k__BackingField>Notes</d2p1:_x003C_DisplayName_x003E_k__BackingField> 
</d2p1:CatalogDto> 
<d2p1:CatalogDto> 
<d2p1:_x003C_CatalogId_x003E_k__BackingField>6</d2p1:_x003C_CatalogId_x003E_k__BackingField> 
<d2p1:_x003C_CatalogName_x003E_k__BackingField>World Coins</d2p1:_x003C_CatalogName_x003E_k__BackingField> 
<d2p1:_x003C_DisplayName_x003E_k__BackingField>Coin</d2p1:_x003C_DisplayName_x003E_k__BackingField> 
</d2p1:CatalogDto> 
</_x003C_Data_x003E_k__BackingField> 
</CatalogsListResponse> 

JSON

{"requestTime":"2014-02-03T21:23:13.1126109Z","responseTime":"2014-02-03T21:23:13.1176150Z","error":null,"customizations":null,"data":null,"total":4,"infos":null,"errors":null,"warnings":null,"alerts":null} 

JSV

{requestTime:"2014-02-03T21:24:06.9960409Z",responseTime:"2014-02-03T21:24:07.0010430Z",total:4}

Я буду рад предоставить какие-либо дополнительные детали, необходимые.

ответ

2

См. Это earlier answer on avoiding inheritance in DTOs. Если вы все еще хотите использовать наследование, вы должны изменить DtoBase как класс .

Примечание: атрибут [Serializable] не влияет на ServiceStack.

+0

Спасибо, это имеет смысл. Я член культа груза! Я тестировал это, рефакторинг одного запроса/ответа/ответа и, похоже, решил мою проблему. Из любопытства было изменение, которое вызвало новое намерение? –

+0

@ Emotehman не было никаких изменений, необходимая ** __ type ** информация только выдается, когда это необходимо, если только поведение по умолчанию не переопределено JsConfig.IncludeTypeInfo. – mythz

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