Не удается десериализовать ответ службы при использовании клиента servicestack MsgPack

#servicestack #messagepack

#servicestack #пакет сообщений

Вопрос:

Я получаю приведенную ниже ошибку при попытке десериализовать ответ от службы при использовании servicestack MsgPackServiceClient.

Исключение: {«Не удается десериализовать элемент ‘test1’ типа ‘System.Int32′».}

InnerException : {«Не удается преобразовать значение типа ‘System.Int32’ из значения типа ‘FixedRaw'(0xA4) со смещением 1».}

Служба Servicestack на стороне сервера:

     public class TestService : Service
    {
        public test Get(test s)
        {

            return new test { test1 = 12, test2 = "testvalue", Domian = "1234" };
        }
    }
  

DTO на стороне сервера:

 [Route("/test")]
public class test
{
    public int test1 { get; set; }
    public string test2 { get; set; }
    public string Domain { get; set; }
}
  

Код на стороне клиента:

 class Program
{
    static void Main(string[] args)
    {
        MsgPackServiceClient c = new MsgPackServiceClient(@"http://localhost:52862/");

        var result = c.Get<test>(@"/test");

    }
}
  

dto на стороне клиента:

 public class test
{
    public int test1 { get; set; }
    public string test2 { get; set; }
}
  

На стороне клиента нам не нужно свойство домена. Когда мы пытаемся получить значения, выдается вышеупомянутое исключение.

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

Нам действительно нужно иметь все свойства?

Пожалуйста, помогите мне в решении этой проблемы. Спасибо за ваше время.

Ответ №1:

Если вы используете двоичный формат, такой как MsgPack, вам следует использовать точные DTO, которые использовались для сериализации, на что рассчитаны многие двоичные сериализаторы.

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