使用servicestack MsgPack客户端时无法反序列化服务响应

时间:2016-10-22 09:07:11

标签: servicestack messagepack

在使用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; }
}

客户端我们不需要域名属性。当我们尝试获取值时,抛出异常。

当我们添加Domain属性时,它工作正常,我们可以获取值。

我们真的需要拥有所有属性吗?

请帮我解决这个问题。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

如果您使用像MsgPack这样的二进制格式,则应使用用于序列化的完全 DTO,这是许多二进制序列化程序所期望的。

如果您只想在客户端上使用部分DTO,则应使用灵活的文本序列化器,例如JSON。