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; }
}
我正在使用 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; }
}