使用Protobuf-net和Monotouch for IOS序列化IEnumerable槽WCF

我正在尝试在Monotouch / Monodevelop上为IOS编写WCF服务。 我使用[DataMember] / [DataContract]等标准属性作为我的可序列化对象,使用[ServiceContract] / [OperationContract]作为我的界面。 一切正常,但是当我尝试在接口实现(服务器端)上实现返回IEnumerable的方法时,它没有用。

所以为了解决我的问题,我尝试使用最新版本的protobuf-net protobuf-net v2 beta r404。 但是我仍然从Protobuf-net那里得到序列化错误。 请注意,“MyObject”中的IEnumerable序列化没有问题。

以下是我的代码现在的样子:

为MyObject:

[ProtoContract] public class MyObject { public MyObject () { } [ProtoMember(1)] public int Id {get;set;} [ProtoMember(2)] public IEnumerable myObjects {get;set;} } 

我的界面(Windows上的服务器端):

 [ServiceContract] public interface ITouchService { [OperationContract, ProtoBehavior] MyObject Execute(); [OperationContract, ProtoBehavior] IEnumerable ExecuteENUM (); } 

我的界面(IOS上的客户端,我无法添加ProtoBehavior作为属性,因为它不在protobuf的ISO dll中):

 [ServiceContract] public interface ITouchService { [OperationContract] MyObject Execute(); [OperationContract] IEnumerable ExecuteENUM (); } 

我的界面实现:

 public class TouchService : ITouchService { public MyObject Execute() { var myObject = new MyObject() { Id = 9001 }; var myList = new List(); for (int i = 0; i < 10; i++) { myList.Add(new MyObject() { Id = i }); } // Will serialize myObject.myObjects = myList; return myObject; } public IEnumerable ExecuteENUM() { var myEnum = new List(); for (int i = 0; i < 10; i++) { myEnum.Add(new MyObject() { Id = i }); } return myEnum; } } 

我怀疑应该可以调整数据合同序列化程序代码。 我会看一看。

现在:我的建议是返回一个明显具有IEnumerable作为属性的具体类型。 或者可能返回List ,这可能有效。

但是,支持这种情况听起来是合理的。 我会看看我能做什么。