如何在RavenDB中存储具有动态属性的C#对象?

布赖恩德

尝试在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Redux中存储具有单独属性的对象

如何在 C# 中拥有动态属性

如何在VBA中的excel中创建具有文件属性的动态对象列表

如何在TypeScript中为具有动态属性的对象定义类型

如何在Elastic Search中增加具有动态属性的嵌套对象?

如何在多个对象中插入具有动态值的属性或在多个数组中动态添加元素?

如何在 TEntity 中动态搜索具有值的属性?

如何在C#中使用javascript创建具有属性的简单对象

如何在php中动态创建具有计数的对象?

如何在React中映射具有动态键的对象?

如何在 C++ 中存储动态创建的对象的地址?

如何在具有动态对齐要求的C ++中创建对象?

如何在现代C ++中存储具有不同签名的功能对象

从文件C#中读取具有矢量属性的对象

在Cosmos DB中将具有动态属性的对象存储

如何从具有特定属性的对象的C#列表中创建json字符串?

如何在C#中的嵌套json对象中探索所有属性及其值?

如何在 C# 中反序列化具有属性的 XML

如何在C#中解析具有多个xmlns属性的xml?

如何在 C# TreeView 中仅查看包含具有 ReadOnly 属性的 PDF 的目录?

如何在C中具有动态线程数

如何在C#中检查对象是否没有null属性

C#初始化仅获取具有动态范围对象的列表属性

如何在 vuex 存储打字稿中动态设置对象的属性(同时保持类型安全)

如何在C#中将具有子属性的JSON反序列化为一个对象

如何在JavaScript中的另一个对象中查找具有属性的对象

C#创建具有动态属性的对象:LINQ通过属性名称数组选择List <object>值

如何深度复制具有动态添加属性的对象?

如何为具有动态属性的扩展对象创建类型