2

我正在从 AD/LDAP 导入一些数据,并且byte[]ResultPropertyValueCollection对象中返回的二进制属性存在一些问题。

最简单的示例是 objectGUID 属性。我需要它在适当的 GUID 对象中,而不是byte[]. 我可以很容易地说new Guid(myByteArray),但如果有其他不是GUID 的二进制字段(我猜图像等),这似乎很笨拙。

是否有任何干净整洁的方法可以从 a 获取非序列化类型,byte[]而不仅仅是尝试从中创建不同的对象?或者更好:我可以让 LDAP/AD 告诉我它是什么类型的对象吗?我喜欢这个,因为我想要一个可以处理所有属性并将它们正确映射到我自己的系统中的通用导入。

...这可能是一种边缘情况,但如果可以以通用方式做到这一点,那将是完美的。如果没有,我现在可能会坚持尝试捕捉 a new Guid(myByteArray)

4

2 回答 2

3

您应该检查字节数组的长度是否正好为 16 个字节。除此之外,GUID 显然只是一个 16 字节的数组,因此您无法根据任何其他指标对其进行验证。

至于意外反序列化另一个数据类型的字节数组,不幸的是,这些信息通常不与序列化的字节数组一起存储。调用者应该已经知道字节数组是什么,并自己进行转换。

于 2012-08-13T14:41:28.613 回答
0

你可以用一行代码来做到这一点我现在在我们的 LDAP/AD 环境中这样做

var sObjectGUID = entry.NativeGuid.ToString();

请记住,我正在做更多的代码,但基本上我的业务代码中有一个方法,我不能在这里分享,但我正在根据 SamAccount 是否存在进行检查。

public static string SamExist( string domain, string userid)
{
}
于 2012-08-13T14:45:52.647 回答