2011-08-25 64 views
0

我使用mongodb和Rest。每个文档由场ID(GUID)和名称(字符串)将MongoDB Rest的Guid转换为C#CLR

这里的钱包显示的,当我访问网页:

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

在MongoDB中,我的Guid变成了一个UUID(说我JMongoBrowser )并显示为46eb229f-b493-5630-b0d7-aa00499fafa0。

但是,当我访问我的休息网页时,它被分成两部分(二进制和一个类型)。那么如何将它转换为C#对象呢?

感谢

回答

4

的字符串是代表GUID的字节数组base-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

嗨,感谢您的回答。我得到的Guid是不一样的。我试过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

@John - 我已经更新了我的答案。有一些时髦的UUID以及可能会使其更复杂的排序古怪。 –