【问题标题】:convert MongoDB Rest's Guid into C# CLR将 MongoDB Rest 的 Guid 转换为 C# CLR
【发布时间】:2013-12-31 03:28:39
【问题描述】:

我将 mongodb 与 Rest 一起使用。每个文档都由字段 Id(Guid) 和 Name (string) 组成

这是我访问网页时显示的内容:

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

在 mongodb 中,我的 Guid 被转换为 UUID(比如我的 JMongoBrowser)并显示为 46eb229f-b493-5630-b0d7-aa00499fafa0。

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

谢谢

【问题讨论】:

    标签: c# mongodb mongodb-.net-driver


    【解决方案1】:

    字符串是一个base-64编码的字符串,代表guid的字节数组,但是你需要处理字节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));
    }
    

    【讨论】:

    • 您好,感谢您的回答。我得到的指导不一样。我试过 jDZDtw+bSUu/TJ9JAKpwug== 应该得到 4b499b0f-b743-368c-ba70-aa00499f4cbf 但我有 b743368c-9b0f-4b49-bf4c-9f4900aa70ba 根据mongodb.org/display/DOCS/Mongo+Extended+JSON 是的,它确实是base64
    • 确实有效。是我的 JMongoBrowser 骗了我!!无论如何,非常感谢
    • @John - 我已经更新了我的答案。有一些时髦的 UUID 和可能的字节序奇怪,使其更加复杂。
    • 天哪,这很奇怪。当我使用您的 ToGuid 方法时,我在 JMongoBrowser 中看到的 Guid 相同。但是当我在 C# 中查询我的 mongodb 时,它返回“new Guid(Convert.FromBase64String(jsonUuid)) 的值。我不明白区别?你能更详细地解释你的答案吗?
    • @John - 我已经更新了我的答案。我无法解释这一切,尽管我知道它与 a) GUID 格式(参见维基百科)以及可能使用不同字节序对整数进行编码的底层计算机/操作系统/技术有关(参见维基百科)。您是否仅使用 Windows/.NET 或其他技术、操作系统?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多