1

作品:

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
public class ExcelData
{
    public int[] DataObjects { get; set; }
}

不工作:

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
public class ExcelData
{
    public object[] DataObjects { get; set; }
}

我的测试:

[TestMethod]
public void ProtoWithObjectArray()
{
   var ex = new ProtoBufServiceClient(baseUrl);
   var res = ex.Get(new SelectWorksheetRange());
}

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
public class SelectWorksheetRange : IReturn<ExcelData>
{
}

我什至没有看到错误,因为测试只是在 ex.Get 完成,没有任何信息。如何调试这个?

4

1 回答 1

1

我无法评论 ServiceStack,但就 protobuf-net 而言,是的:“int[]好,object[]坏”。原因是 protobuf 有线格式(由 Google 设计)非常简洁,并且包含精确的零元数据:它希望任何对话的两端都能准确地知道他们在任何时候交换的内容。使用int[],这是可能的,而使用object[]它根本不是。有一些令人讨厌的黑客攻击方法,但它们往往是有问题的(维护方面)并且效率低下。

于 2014-03-16T09:26:24.130 回答