尝试在RavenDB中保存具有动态属性的对象时遇到问题
我要保存的对象代表一个订单。该订单包含订单行列表,因此请想象以下Order类:
public class Order {
public int Id { get; set; }
public List<Orderline> Orderlines { get; set; }
}
Orderline类为:
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将Order对象存储为
{
"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
未设置的values属性。
当我尝试将对象序列化回我的C#Order对象时,出现以下异常;
无法将类型为“ Raven.Imports.Newtonsoft.Json.Utilities.CollectionWrapper`1 [Newtonsoft.Json.Linq.JToken]”的对象强制转换为类型为“ Newtonsoft.Json.Linq.JValue”的对象。
我在做什么错,如何将该对象存储在RavenDB数据库中并检索它?
用'dynamic'类型存储动态属性显然是不够的。当我给Attributes属性提供ExpandoObject类型时,RavenDB将Attributes属性存储为普通的JSON(没有$ type和$ values,因此很干净)
从RavenDB数据库取回它时,它将反序列化回一个ExpandoObject对象。
尝试在Razor视图中显示该属性时,请确保将ExpandoObject属性转换为动态属性(例如“ as dynamic”)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句