【发布时间】:2020-06-29 03:12:26
【问题描述】:
在将 Gremlin 结果集映射到 C# 中的类时遇到问题。我正在尝试获取顶点和属性。代码如下:
public IList<T> All<T>() where T : class, new()
{
Type type = typeof(T);
string query = "g.V().hasLabel('" + type.Name.ToString().ToLower() + "').valueMap(true)";
var resultSet = _gremlinClient.SubmitAsync<dynamic>(query).Result;
List<T> list = JsonConvert.DeserializeObject<List<T>>(JsonConvert.SerializeObject(resultSet));
return list;
}
这里是 User 实体,我将它传递给这个通用方法。
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
当我运行代码时,它在反序列化时抛出错误。
'解析值时遇到意外字符:[.路径“[0].FirstName”,第 1 行,位置 37。
当我检查它时,我发现 JSON 字符串的属性值带有方括号,如下所示:
[
{
"id": 0,
"label": "user",
"FirstName": [ "Azhar" ],
"LastName": [ "Rahi" ]
},
{
"id": 3,
"label": "user",
"FirstName": [ "John" ],
"LastName": [ "Doe" ]
}
]
您可以看到一些属性带有方括号,例如"FirstName":["Azhar"]。我已经在没有方括号的情况下对其进行了测试,并且工作正常。所以错误的原因是因为字符串在 JSON 中表示为数组。
在上述 JSON 字符串中,id 和 label 是 Gremlin.Net 自动生成的属性。其余的实际上是User 对象属性。我不知道为什么 Gremlin 在向Vertex 添加属性时要添加括号,以及是否有可能避免它。
请提出任何解决方案,无论是在 Gremlin.Net 中还是通过某种方式更改 JSON 到类的映射。
【问题讨论】:
-
public string[] FirstName { get; set; } -
为什么要序列化和反序列化相同的东西,只返回
resultSet -
@Gusman 我知道,但逻辑上,用户的名字不能是数组。这样做将强制我从数组的索引 0 中获取值。第二,我使用的是通用方法,所以解决方案应该是通用的。我将更新我的描述。
-
@Sajid,这引发了其他错误。
-
所以如果我理解正确的话,在
resultSet中你有一个名字和姓氏的数组,你可以序列化和反序列化以避免这个结果。如果是,你可以使用 JsonConverter。
标签: c# json.net gremlinnet