【问题标题】:How to convert JSON to BSON using Json.NET如何使用 Json.NET 将 JSON 转换为 BSON
【发布时间】:2016-02-14 14:34:43
【问题描述】:

我有一个包含 JSON 的字符串。关于这个 JSON,我唯一知道的是它是有效的。如何把这个字符串变成 BSON?

【问题讨论】:

    标签: c# json.net bson


    【解决方案1】:

    Newtonsoft.JsonBsonWriter 已过时。

    您需要添加一个名为Json.NET BSON 的新nuget 包(只需搜索newtonsoft.json.bson)并使用BsonDataWriterBsonDataReader 而不是BsonWriterBsonReader

    public static string ToBson<T>(T value)
    {
        using (MemoryStream ms = new MemoryStream())
        using (BsonDataWriter datawriter = new BsonDataWriter(ms))
        {
            JsonSerializer serializer = new JsonSerializer();
            serializer.Serialize(datawriter, value);
            return Convert.ToBase64String(ms.ToArray());
        }
    
    }
    
    public static T FromBson<T>(string base64data)
    {
        byte[] data = Convert.FromBase64String(base64data);
    
        using (MemoryStream ms = new MemoryStream(data))
        using (BsonDataReader reader = new BsonDataReader(ms))
        {
            JsonSerializer serializer = new JsonSerializer();
            return serializer.Deserialize<T>(reader);
        }
    }
    

    【讨论】:

    • 当 BSON 首次添加到 Newtonsoft.Json 时,我正在查看此链接。 linkBSON 直接存储二进制数据,避免了常规 JSON 对二进制数据的时间开销和 base64 编码文本的额外大小。 那么,base64 到和从转换的需求是什么?我并不反对,我在其他代码示例中也看到过这些,我只是感到困惑。
    • 再看这个,我想我可以回答我自己的问题了。正是因为 BSON 直接存储二进制数据,所以任何以 BSON 格式编码的包含二进制数据的东西都需要转换为 base64 才能安全地通过 IP 传输,而 Json 完全基于字符,不需要这个。然而,BSON 避免了 base64 的时间开销和额外大小的说法似乎有点不诚实,因为无论如何你都需要进行这种转换,更进一步。
    【解决方案2】:

    在我的项目中使用json 时,我注意到有一些简单而巧妙的方法可以将json 转换为bson 文档。

     string json = "{\"Name\":\"Movie Premiere\"}";
     BsonDocument document = BsonDocument.Parse(json);
    

    现在您可以在任何地方使用document 作为 bson。

    注意-我正在使用这个document 插入MongoDb 数据库。

    希望对您有所帮助。

    【讨论】:

    • 但我相信这种方法不是使用 JSON.net,而是使用 MongoDB 的库。
    【解决方案3】:

    看!有一种更简单的方法可以做到这一点:

    BsonDocument doc = BsonDocument.Parse("{\"your\": \"json\", \"string\": \"here\"}");
    

    【讨论】:

    • 如果有人想出如何在一个整洁的数组上使用这个解析
    • 你可以使用BsonArray.Parse@VincentBuscarello
    • 这有帮助。希望有一些可以采用数组或对象并动态知道如何处理它的东西。我们最终自己旋转了,但如果这是在这个库中并且有人知道它会很乐意听到。
    【解决方案4】:

    我认为这对你有用

    MongoDB.Bson.BsonDocument BSONDoc
    = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(json);
    

    你也可以看看Serialize to BSONC# - Converting JSON string to BSON document

    【讨论】:

      【解决方案5】:

      https://www.nuget.org/packages/Newtonsoft.Json

      PM> 安装包 Newtonsoft.Json -Version 7.0.1

      using Newtonsoft.Json.Bson;
      using Newtonsoft.Json;
      
       class Program
          {
              public class TestClass
              {
                  public string Name { get; set; }
              }
      
              static void Main(string[] args)
              {
                  string jsonString = "{\"Name\":\"Movie Premiere\"}";
                  var jsonObj = JsonConvert.DeserializeObject(jsonString);
      
                  MemoryStream ms = new MemoryStream();
                  using (BsonWriter writer = new BsonWriter(ms))
                  {
                      JsonSerializer serializer = new JsonSerializer();
                      serializer.Serialize(writer, jsonObj);
                  }
      
                  string data = Convert.ToBase64String(ms.ToArray());
      
                  Console.WriteLine(data);
              }
          }
      

      【讨论】:

      • 用户可能想要使用的更新:BsonWriter 已过时,请查看我的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      相关资源
      最近更新 更多