Tag: datacontract

带有方法的WCF DataContract类

这更像是一种哲学/最佳实践问题,而不是技术问题。 是否有任何强有力的论据反对使用仅在服务器端使用的方法编写DataContract类? 或者没有使用DataMember属性修饰的其他属性呢? 例如: [DataContract] public class LogEntry { [DataMember] public string Message { get; set; } [DataMember] public string Severity { get; set; } public string SomeOtherProperty { get; set; } … public void WriteToDatabase() { … } } 虽然使用扩展方法可以使它更容易,但是不这样做似乎是我想要避免的大量额外工作。 但是,作为一名优秀的开发人员,我想知道这样做是不好的做法。

标记WCF合同中已弃用的字段

我有一个与客户端v1一起使用的wcf合同。 现在我正在研究服务v2,我想将某些字段标记为已弃用,因此客户端v1将查看并使用它们,而客户端v2将忽略它们。 这个问题有什么最佳做法吗? 我应该使用WCF中的任何现有属性吗? 谢谢。

如何在WCF中使用没有属性“KnownType”的接口数据类型?

如果我正在使用包含“OperationContract”操作的“ServiceContract”。 操作返回或接收接口参数。 当我使用该服务时,我收到一条exception消息: “反序列化器不知道映射到此名称的任何类型。如果使用DataContractSerializer或将与'{%className%}’对应的类型添加到已知类型列表中,请考虑使用DataContractResolver”。 我可以将KnowTypes的属性添加到接口,但我的接口项目与实现项目分离,并且它们不能具有循环依赖性引用,因此无法声明KnowTypes。 什么是最好的解决方案?

如何在WCF中将接口标记为DataContract

我有两个数据类,只保存数据成员(没有函数)。 一个是CallTask ,另一个是SmsTask 。 这两个类有一些常见的属性,如ID , Tel 。 我将这些常见属性放在一个单独的接口类中,并在适当的时候在我的项目中使用此接口类。 现在我在我的项目中添加了一个WCFService,以便在客户端和服务器之间共享数据。 考虑以下类设计: public interface IGsmTask : IComparable { string TaskID { get; set; } string SessionID { get; set; } string Tel { get; set; } } class CallTask : IGsmTask { #region IGsmTask Members public string TaskID { get; set; } public string SessionID { […]

树结构的序列化/ Derialization

我试图找出保存(序列化)和以后打开(反序列化)树结构的最佳方法。 我的结构由具有不同属性的各种对象类型组成,但每个都inheritance自基本抽象“Node”类。 每个节点都有唯一的ID(GUID),并且有一个AddSuperNode(Node nd)方法,用于设置节点的父节点。 这反过来调用其他方法,允许父节点知道它有哪些子节点。 但是,某些节点还使用AddAuxSuperNode()方法向节点添加辅助父节点。 我正在使用二进制序列化,但现在我想我想使用一些我有更多控制的东西,并且序列化数据更容易访问。 我还希望在反序列化时保留Type信息,并能够序列化私有值。 所以DataContractSerializer似乎是最好的方式。 我不能直接序列化根节点,因为节点有多个父节点。 我不想创建重复的对象。 所以我似乎需要将树解构为一个平面列表,然后将其序列化。 然后在序列化该列表后重建树。 这听起来不错吗? 就像我在每个节点都有一个唯一的GUID标识符之前所说的那样,但是现在节点直接引用它们的父节点/子节点并且不存储它们的id。 我可以更新AddSuperNode()和AddAuxSuperNode()方法,以便除了直接引用之外还更新要序列化的父ID列表。 但是我宁愿只在序列化对象时更新/创建这个列表。 所以我想在节点中创建一个UpdateSuperNodeIDRefs()方法,该方法将在序列化之前调用。 以下是我计划对此结构进行序列化和反序列化的操作。 任何人都可以建议更好/更清洁/更有效的方法吗? 序列化 1)提供树结构的根节点 2)将树结构分解为平面词典(Guid id,Node nd) ,其中id是nd的guid 。 3)调用UpdateSuperNodeIDRefs() ; 为每个节点更新为其父节点保存的ID。 4)使用DataContractSerializer序列化节点字典 反序列化 1)反序列化节点字典 2)遍历字典中的每个节点 ,将每个节点重新连接到其父节点 。 对于存储的任何父ID,查找具有匹配ID的字典中的相应节点调用AddSuperNode()或AddAuxSuperNode()以将节点重新连接到其父节点。 3)从Dictionary中的任何节点找到结构的根 4)返回根节点

将DataMemberAttribute放在接口成员上意味着什么?

将DataMemberAttribute放在接口成员上意味着什么? 这对派生类有何影响?

DataContract,默认DataMember值

有没有办法在反序列化期间选择不在xml文件中的属性的默认值? 如果xml文件中没有mAge属性,我想使用默认值18.是否可以? [DataContract] public class Person { public Person () { } [DataMember(Name = “Name”)] public string mName { get; set; } [DataMember(Name = “Age”)] public int mAge { get; set; } [DataMember(Name = “Single”)] public bool mIsSingle { get; set; } }; 编辑以回答。 [DataContract] public class Person { public Person () { } [DataMember(Name […]

我可以将WCF DataContract添加到复杂类型吗?

我有一个复杂的数据类型,包括许多函数,以及通常的get和get方法。 如果我可以使用WCF,我的生活会变得相当容易,所以我的客户也可以使用这种数据类型。 我 忽略所有操作,仅在需要的地方放置[DataMemeber] 。 将有问题的类放在共享库程序集中,以供客户端和服务器访问。 谢谢,罗伯托 PS。 我意识到这个问题的措辞可能不尽如人意。

有没有办法从DataContract导出XSD架构

我正在使用DataContractSerializer将我的类序列化/反序列化为XML。 一切正常,但在某些时候,我想为这些XML文件的格式建立一个独立于实际代码的标准模式。 这样,如果在序列化过程中出现问题,我总是可以返回并检查标准模式应该是什么。 或者,如果我确实需要修改模式,则修改是一个明确的决定,而不仅仅是稍后修改我的代码的影响。 此外,其他人可能正在编写其他可能不是基于.NET的软件,需要从这些XML文件中读取。 我希望能够为他们提供某种模式的文档。 DataContract和XSD架构之间是否存在某种关系。 有没有办法将类中的DataContract属性导出为XSD架构?

克隆整个对象图

使用此代码序列化对象时: public object Clone() { var serializer = new DataContractSerializer(GetType()); using (var ms = new System.IO.MemoryStream()) { serializer.WriteObject(ms, this); ms.Position = 0; return serializer.ReadObject(ms); } } 我注意到它没有复制关系。 有没有办法让这种情况发生?