首页 > 解决方案 > 对 Gremlin.net ResultSet 使用 JsonConvert.DeserializeObject(),对象属性为空或空(c#)

问题描述

使用 Gremlin.Net (3.4.6) 和 CosmosDB/Graph 查询后,动态类型的 ResultSet 被序列化。此后将其反序列化为 Person 类型的特定 List<>。基本顶点值在那里,但是属性的值是空的。我尝试了各种解决方案(包括使用 Wrapper)但没有成功(Person 对象为空)。使用 JSON 属性没有区别。

Gremlin.Net.Driver.ResultSet<dynamic> result = await ExecuteQuery();
string pList = JsonConvert.SerializeObject(result);     
List<Person> people = JsonConvert.DeserializeObject<List<Person>>(pList);

pList 如下所示: 请注意,属性成员在 JSON 中具有值

Person 类定义为:

public class Person : VertexBase
    {
        [JsonProperty("Name")]
        public VertexProperty<string, NameMeta> Name { get; set; }       
        public string[] PhoneNumbers { get; set; }    
        public int Age { get; set; }

        public Person()
        {         

        }

    }

这样做的正确方法是什么?当然,获取嵌套的属性字典应该是相当简单的事情。这些示例不显示反序列化

标签: c#jsondeserializationvertex

解决方案


我遇到了类似的问题,我通过向我的类(Person在您的情况下为类)显式添加一个包含 Properties 字典的成员来解决它:

    public class PropertyKeyValuePair
    {
        public string Id;
        public string Value;
    }

    public class Person
    {
        // Other fields
        // ...
        public Dictionary<string, PropertyKeyValuePair[]> properties;
    }

JsonConvert.DeserializeObject函数现在应该能够将属性反序列化到properties成员中。


推荐阅读