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

时间:2011-06-29 00:17:34

标签: 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();
        }
    }
}

似乎根本原因在于RavenJObject如何工作,因为这会引发同样的错误:

RavenJObject storeMe = RavenJObject.FromObject("errors", new JsonSerializer());

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

3 个答案:

答案 0 :(得分:7)

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

然后像这样注册:

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

答案 1 :(得分:5)

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

直接存储字符串(JSON“...”)或列表(JSON [{},{}])不起作用。虽然您可以将它们存储为文档对象的属性。

答案 2 :(得分:0)

尝试使用适用于列表的RavenJArray.FromObject(..)