在RavenDB中存储对象需要做什么?

Dav*_*ith 9 ravendb

我正在使用ravendb序列化一个对象并通过mstest测试它.

我得到了这个结果: System.ArgumentException: Object serialized to String. RavenJObject instance expected.

这是我的代码

public class Store
{
    private static IDocumentStore store = createStore();

    private static EmbeddableDocumentStore createStore()
    {
        var returnStore = new EmbeddableDocumentStore();
        returnStore.DataDirectory = @"./PersistedData";
        returnStore.Initialize();
        return returnStore;
    }

    public static void Write(string value)
    {
        using (var session = store.OpenSession())
        {
            session.Store(value);
            session.SaveChanges();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎根本原因在于RavenJObject如何工作,因为它抛出相同的错误:

RavenJObject storeMe = RavenJObject.FromObject("errors", new JsonSerializer());
Run Code Online (Sandbox Code Playgroud)

如何在RavenDB中进行自定义序列化?

Dav*_*ith 7

使用您未编写的类进行自定义序列化(因此您无法归因)实现Newtonsoft.Json.JsonConverter

然后像这样注册:

using (var session = store.OpenSession())
     {
         session.Advanced.Conventions.CustomizeJsonSerializer = serializer => serializer.Converters.Add(MailAddressJsonConverter.Instance);
         session.Store(mailAddress);
         session.SaveChanges();
     }
Run Code Online (Sandbox Code Playgroud)

  • 只是一个注释 - 我不得不使用session.Advanced.DocumentStore.Conventions.CustomizeJsonSerializer,而不是session.Advanced.Conventions.CustomizeJsonSerializer. (2认同)

Chr*_*nty 5

根据我们在问题评论中的讨论,Raven希望你存储的对象是常规类,我的意思是它们应该JSON序列化为{Id:...}的结构.

直接存储字符串(JSON"...")或列表(JSON [{},{}])是行不通的.虽然您可以将它们存储为文档对象的属性.