【问题标题】:Serializing a .NET type from an LdapConnection从 LdapConnection 序列化 .NET 类型
【发布时间】:2011-03-04 17:31:48
【问题描述】:

我在使用 LdapConnection 向 AD LDS(以前称为 ADAM)数据存储区发出请求时遇到问题。美好的。但是现在已经出现了能够“远程”执行此操作的要求。基本上,我们可以指望始终可以访问数据存储的程序现在需要通过“内部”网络上的“服务器”程序来完成,以便外部网络上的“客户端”仅通过我们的新“服务器”进行通信程序。有一个原因(不是一个很好的原因,但有一个原因)我们不能只将 AD LDS 服务器暴露给外部。但他们希望它“快速”完成,因此不想重新设计客户端应用程序(应该是真正发生的事情)。因此,我们需要序列化DataRequestDataResponses 以往返于“服务器”部分。

大问题:DataResponses 似乎不可序列化。在测试期间,DataContractSerializer 序列化我的SearchRequest 没有问题,但SearchResponse 得到这个:

System.Runtime.Serialization.InvalidDataContractException occurred
  Message="Type 'System.DirectoryServices.Protocols.SearchResponse' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.  See the Microsoft .NET Framework documentation for other supported types."
  Source="System.Runtime.Serialization"
  StackTrace:
       at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type)
  InnerException: 

好的。但是这两种类型都没有Serializable 或者什么都没有。那么为什么 SearchRequest 可以顺利通过流程,而响应却没有呢?

但这最终甚至都无关紧要。我应该如何序列化我无法更改的类型,因为它内置于 .NET 框架中,并且我无法“重新制作”,因为构造函数是内部的?如果我可以“获取我需要的信息”并在我的网络连接的另一端重新创建类,我会的,但是这些类型没有公共构造函数。

有什么想法吗?我什至想知道为什么即使没有DataContractSerializer 的正确属性,其中一种类型也“正常工作”,而另一种则没有。

【问题讨论】:

    标签: c# .net serialization datacontractserializer


    【解决方案1】:

    最好的(可能也是唯一的)方法是创建自己的包装类,然后读取结果并存储在类中并序列化。

    SearchResponse 实际上是一个 COM 包装器,不能被序列化。

    【讨论】:

    • 不幸的是,这不起作用,因为现有代码需要 DirectoryResponse 及其实际子类。不,该代码也无法更改。我在一个相当大的框架中工作,因此受到它的限制。
    • 基本上我必须这样做,并在我们的框架中触及十几个类。不是我想做的,而是想向你表示,这基本上就是发生的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 2021-12-03
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多