Мы находимся в процессе перехода от 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
}
Я буду рад предоставить какие-либо дополнительные детали, необходимые.
Спасибо, это имеет смысл. Я член культа груза! Я тестировал это, рефакторинг одного запроса/ответа/ответа и, похоже, решил мою проблему. Из любопытства было изменение, которое вызвало новое намерение? –
@ Emotehman не было никаких изменений, необходимая ** __ type ** информация только выдается, когда это необходимо, если только поведение по умолчанию не переопределено JsConfig.IncludeTypeInfo. – mythz