2011-08-25 3 views
0

나머지는 mongodb를 사용합니다. (내 JMongoBrowser을 말하는 UUID로MongoDB Rest Guid를 C# CLR로 변환

"_id" : { "$binary" : "Oq4RFClrRUOtIp89AQTGPw==", 
     "$type" : "03" 
"name" : "HelloWorld" 

MongoDB를에서, 내 GUID를 변형되었다 : 모든 문서는 필드 ID (GUID)와 이름 (문자열) 나는 웹 페이지에 액세스 할 때

다음

가 표시되는 내용입니다 구성되어 있습니다)로 표시되며 46eb229f-b493-5630-b0d7-aa00499fafa0으로 표시됩니다.

하지만 나머지 웹 페이지에 액세스하면 두 부분으로 나뉩니다 (이진수 및 유형). 그렇다면 어떻게 C# 객체로 변환 할 수 있습니까?

감사

답변

4

문자열은 GUID의 바이트 배열을 나타내는베이스 64로 인코딩 된 문자열이지만,이처럼 다시 가질 수 있도록, 바이트 UUD 인코딩 처리해야합니다

public static Guid ToGuid(string jsonUuid) 
{ 
    byte[] bytes = Convert.FromBase64String(jsonUuid); 
    byte[] rbytes = new byte[16]; 
    rbytes[0] = bytes[4]; 
    rbytes[1] = bytes[5]; 
    rbytes[2] = bytes[6]; 
    rbytes[3] = bytes[7]; 
    rbytes[4] = bytes[2]; 
    rbytes[5] = bytes[3]; 
    rbytes[6] = bytes[0]; 
    rbytes[7] = bytes[1]; 
    rbytes[8] = bytes[15]; 
    rbytes[9] = bytes[14]; 
    rbytes[10] = bytes[13]; 
    rbytes[11] = bytes[12]; 
    rbytes[12] = bytes[11]; 
    rbytes[13] = bytes[10]; 
    rbytes[14] = bytes[9]; 
    rbytes[15] = bytes[8]; 
    return new Guid(rbytes); 
} 

또는 다음과 같이 입력하십시오.

public static Guid ToGuid(string jsonUuid) 
{ 
    return new Guid(Convert.FromBase64String(jsonUuid)); 
} 
+0

안녕하세요. 내가 얻는 가이드는 같지 않습니다. 나는 jDZDtw + bSUu/TJ9JAKpwug ==를 시도하고 4b499b0f-b743-368c-ba70-aa00499f4cbf를 얻었지만 b743368c-9b0f-4b49-bf4c-9f4900aa70ba를 가지고있다. http://www.mongodb.org/display/DOCS/에 따르면 Mongo + Extended + JSON 예, 실제로 base64입니다. – Gui

+0

실제로 작동합니다. 나에게 거짓말을 한 나의 JMongoBrowser이다 !! 어쨌든 많이 고마워요 – Gui

+0

@ 존 - 내 대답을 업데이 트했습니다. 펑키 한 UUID와 아마도 엔디안 (endianness)의 기이함이있어 더 복잡해집니다. –