使用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
,这可能有效。
但是,支持这种情况听起来是合理的。 我会看看我能做什么。
上述就是C#学习教程:使用Protobuf-net和Monotouch for IOS序列化IEnumerable槽WCF分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1008024.html