使用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
,这可能有效。
但是,支持这种情况听起来是合理的。 我会看看我能做什么。
- 将服务引用添加到共享类的多个WCF服务
- 教程:简单的WCF XML-RPC客户端
- 使用WS-Security UsernameToken PasswordDigest身份validation方案的WCF客户端使用Axis 2 Web服务时出错
- ServiceBehavior属性是否由其他类inheritance?
- WCF:EncryptedKey子句未包含所需的加密令牌’System.IdentityModel.Tokens.X509SecurityToken’
- 如何将WCF模板添加到Visual Studio Express?
- WCF,接口返回类型和KnownTypes
- 有没有办法在没有IIS的情况下使用WCF自定义友好URL?
- 支持HTTP和HTTPS Web.Config WCF服务