RavenDB 4.0 存储原始 json

RavenDB 4.0 storing raw json

我正在使用 NLOG 通过 JsonLayout 进行日志记录,并希望将这些日志存储在 RavenDB 4.0 中。 基本上,我正在尝试使用 RavenDB .NET 客户端将原始 json 存储到 ravendb 中。

我在 RavenDB 3.5 中有一个可行的解决方案:使用从 "RavenJObject" 继承的 class,但此功能在 4.0 中被取消了。

我通过将 json 反序列化为动态对象并存储动态对象来使其工作。但这会将文档存储在无意义的 "JObjects" 集合中。将 json 转换为动态并再次返回 json 似乎也有开销。

        var obj = JsonConvert.DeserializeObject<dynamic>(jsonString);
        session.Store(obj);

我知道可以使用 UI (raven studio)。但我找不到使用.Net 客户端的方法。

我认为可以使用 http api,用原始 json 做一个 post。但是我还没有找到关于此的任何文档。

谁能帮帮我?任何建议表示赞赏!

这里有代码示例,可让您对泛型类型进行操作并正确分配集合:

[Fact]
public void RawJson()
{
    using (var store = GetDocumentStore())
    {
        using (var session = store.OpenSession())
        {
            var json = "{ 'Name' : 'John', '@metadata' : { '@collection': 'Users' } }";
            var blittableJson = ParseJson(session.Advanced.Context, json);

            var command = new PutDocumentCommand("users/1", null, blittableJson);
            session.Advanced.RequestExecutor.Execute(command, session.Advanced.Context);
        }

        using (var session = store.OpenSession())
        {
            var user = session.Load<User>("users/1");
            Assert.Equal("John", user.Name);
        }
    }
}

public BlittableJsonReaderObject ParseJson(JsonOperationContext context, string json)
{
    using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
    {
        return context.ReadForMemory(stream, "json");
    }
}

public class User
{
    public string Id { get; set; }

    public string Name { get; set; }
}