У меня возникли проблемы при попытке сохранить объект с динамическим свойством в RavenDBКак хранить объекты C# с динамическими свойствами в RavenDB?
Объект, который я пытаюсь сохранить, представляет собой заказ. Порядок содержит список OrderLines так себе следующий класс Order:
public class Order {
public int Id { get; set; }
public List<Orderline> Orderlines { get; set; }
}
и класс: существо строки заказа
public class Orderline {
public Product Product { get; set; }
public int Quantity { get; set; }
public dynamic Attributes { get; set; }
}
объект, который я пытаюсь сохранить (я отобразить его с JSON);
{
"Id": 0,
"Orderlines": [
{
"Product": {
"Id": 0,
"Name": "Some product"
},
"Quantity": 1,
"Attributes": {
"color": "Red"
}
}
]
}
Сохранение не бросать какие-либо ошибки
RavenDB сохраняет объект Заказывайте как
{
"Id": 0,
"Orderlines": [
{
"Product": {
"Id": 0,
"Name": "Some product"
},
"Quantity": 1,
"Attributes": {
"$type": "Newtonsoft.Json.Linq.JObject, Newtonsoft.Json",
"color": {
"$type": "Newtonsoft.Json.Linq.JValue, Newtonsoft.Json",
"$values": []
}
}
}
]
}
Обратите внимание, что значения свойств Order.Orderlines[0].Attributes.color
не установлен ...
Когда я пытаюсь сериализуйте объект обратно на мой объект заказа C#. Я получаю следующее исключение;
Невозможно привести объект типа 'Raven.Imports.Newtonsoft.Json.Utilities.CollectionWrapper`1 [Newtonsoft.Json.Linq.JToken] к типу 'Newtonsoft.Json.Linq.JValue'.
Что я делаю неправильно, как я могу сохранить этот объект в базе данных RavenDB и получить его?
http://stackoverflow.com/questions/24208510/ravendb-dynamic-объекты могут быть релевантными – stuartd
Зачем вам нужна динамика? Является ли решение, не использовать динамику. – Liam
@Liam. Дело в том, что я пытаюсь создать общий объект Orderline, который все еще может содержать пользовательские свойства. Это актуально, потому что в будущем я бы хотел, чтобы несколько продуктов использовали один и тот же API, который может хранить пользовательские атрибуты приложения в свойстве Attributes (в этом случае цвет) – Bryandh