c# - 将 JSON 反序列化为 C# 数组,其中 index 在属性名称中
问题描述
谁能提供他们反序列化以下 JSON 的方法
{
"i": 5
"b0": "ABC",
"b1": "DEF",
"b2": "GHI",
"s0": "SABC",
"s1": "SDEF",
"s2": "SGHI",
}
进入 C# 中的类以提供与此相同的结构
class Example {
public int Index {get;set;}
public string[] B {get;set;}
public string[] S {get;set;}
}
var b = new [] {"ABC", "DEF", "GHI"}
var s = new [] {"SABC", "SDEF", "SGHI"}
我通常使用 ServiceStack.Text,但 Json.Net 方法甚至来自 MongoDb 提供商的 BsonDocument 都可以。
解决方案
这个解决方案也可能有用:
public class Example
{
public int Index { get; set; }
public string[] B { get; set; }
public string[] S { get; set; }
}
var strData = @"{'i': 5, 'b0': 'ABC','b1': 'DEF', 'b2': 'GHI', 's0': 'SABC', 's1': 'SDEF', 's2': 'SGHI',}";
var data = JsonConvert.DeserializeObject<JToken>(strData).Values().ToList();
Example result = new Example();
result.Index = data.Values().FirstOrDefault(x => x.Path == "i").Value<int>();
result.B = data.Values().Where(x => x.Path.StartsWith("b")).Select(x => x.Value<string>()).ToArray();
result.S = data.Values().Where(x => x.Path.StartsWith("s")).Select(x => x.Value<string>()).ToArray();
数组的动态名称有解决方案,但在这种情况下字符串数组不是最好的类型:
public class Example
{
public int Index { get; set; }
public Dictionary<string, string[]> Data { set; get; }
}
var s = @"{'i': 5, 'b0': 'ABC','b1': 'DEF', 'b2': 'GHI', 's0': 'SABC', 's1': 'SDEF', 's2': 'SGHI',}";
var data = JsonConvert.DeserializeObject<JToken>(s).Values().ToList();
Example result = new Example();
result.Index = data.Values().FirstOrDefault(x => x.Path == "i").Value<int>();
result.Data = new Dictionary<string, string[]>();
var stringData = data.Values().Where(x => x.Path != "i").ToList();
stringData.ForEach(x =>
{
var key = x.Path[0].ToString();
if (!result.Data.ContainsKey(key))
{
result.Data.Add(key, new string[0]);
}
var currentValue = result.Data[key].ToList();
currentValue.Add(x.Value<string>());
result.Data[key] = currentValue.ToArray();
});
推荐阅读
- arrays - 从另一张纸上获取价值并将其放入数组中
- java - 如何使用 byte-buddy 创建可以修改方法返回值的委托类?
- typescript - 如何在 AngularFirestoreCollection 中查询?
- graphql-java - 为什么返回 null 的字符串为 java.lang.Object@.?
- python - 如何从字符串中提取IP地址
- variables - 如何在字符串和 Robotframework 中使用 KSH 变量而不将其解释为案例变量
- c# - EF:如何在同一个解决方案中跨多个项目使用数据库?
- openstreetmap - 确定是十字路口还是三向路口
- python - Accuracy_score 出现错误
- java - 使用spark检索elasticsearch数据时出错