Convert byte[] or object to GUID

前端 未结 5 1829
别那么骄傲
别那么骄傲 2021-02-12 10:20

I assigned some value to object data type like,

object objData =dc.GetDirectoryEntry().Properties[\"objectGUID\"].Value;

this object retun the

相关标签:
5条回答
  • 2021-02-12 10:46

    How about using the Guid constructor which takes a byte array?

    Guid guid = new Guid(binaryData);
    

    (You can then use Guid.ToString() to get it in text form if you need to.)

    0 讨论(0)
  • 2021-02-12 10:58

    Though the manual casting suggested above works, there's a way to do this automatically.

    1. You can use the official SQLite provider instead of the one from Microsoft. Use its SQLiteConnectionStringBuilder to configure a Connection that understands your Guids as Guids:
    var builder = new SQLiteConnectionStringBuilder("Data Source=./mydatabase.db") { BinaryGUID = true };
    var connStr = builder.ToString();
    return new SQLiteConnection(connStr);
    

    Here's the official SQLite provider: https://www.nuget.org/packages/System.Data.SQLite.Core/

    1. If using Dapper, you can have it automatically convert byte arrays to Guid using this class, which should be registered once as soon as your app starts:
    public class GuidTypeHandler : SqlMapper.TypeHandler<Guid>
    {
        public override Guid Parse(object value)
        {
            var valueAsBytes = (byte[])value;
            return new Guid(valueAsBytes);
        }
    
        public override void SetValue(System.Data.IDbDataParameter parameter, Guid value)
        {
            var guidAsBytes = value.ToByteArray();
            parameter.Value = guidAsBytes;
        }
    }
    
    // And the registration in Startup.cs or equivalent:
    SqlMapper.AddTypeHandler<Guid>(new GuidTypeHandler());
    

    Source: Dapper Issue #718 - GitHub

    0 讨论(0)
  • 2021-02-12 11:10

    The System.DirectoryServices.DirectoryEntry class has the property Guid for this purpose - no need to access the objectGUID attribute through Properties.

    0 讨论(0)
  • 2021-02-12 11:12
    byte[] binaryData = objData as byte[];
    string strHex = BitConverter.ToString(binaryData);
    Guid id = new Guid(strHex.Replace("-", ""))
    
    0 讨论(0)
  • 2021-02-12 11:12

    The long form would be (enter link description here):

    public static string ConvertGuidToOctectString(string objectGuid)
    {
        System.Guid guid = new Guid(objectGuid);
        byte[] byteGuid = guid.ToByteArray();
        string queryGuid = "";
        foreach (byte b in byteGuid)
        {
            queryGuid += @"\" + b.ToString("x2");
        }
        return queryGuid;
    }
    
    0 讨论(0)
提交回复
热议问题