我正在使用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中进行自定义序列化?
答案 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(..)