在 C# 中使用不总是相同的 class 名称反序列化 Json
Deserialize Json with class names that are not always the same, in C#
我正在尝试反序列化来自 firebase 实时数据库的响应 get/json,以获取在线用户位置
示例响应:
{
"test1": {
"id": "test-1",
"location": {
"lat": 37.33097983,
"long": -122.03063943
}
},
"test2": {
"id": "test-2",
"location": {
"lat": 37.33021864,
"long": -122.02370753
}
},
"test3": {
"id": "test-3",
"location": {
"lat": 37.32873847,
"long": -122.01980584
}
},
"test4": {
"id": "test-4",
"location": {
"lat": 37.32563464,
"long": -122.01972943
}
},
"test5": {
"id": "test-5",
"location": {
"lat": 37.32472734,
"long": -122.02127163
}
}
}
我将其放入 json 到 c# class 的转换器中,它为每个用户(Test1、Test2、Test3 等)创建了一个 class。如果示例中的用户是响应中的唯一用户,这将起作用。如果我有第六个用户名为“6test”,我还需要为那个用户创建一个 class。
如何使用 Json 转换器(Newtonsoft.Json 或 System.Text.Json)到 return list<User>
中的用户
你可以在你的情况下使用字典
using Newtosoft.Json;
Dictionary<string,Test> tests = JsonConvert.DeserializeObject<Dictionary<string,Test>>(json);
classes
public class Location
{
public double lat { get; set; }
public double @long { get; set; }
}
public class Test
{
public string id { get; set; }
public Location location { get; set; }
}
使用方法
Test test5=tests["test5"];
或者如果您想使用列表而不是字典
var jsonParsed = JObject.Parse(json);
List<ListTest> list = jsonParsed.Properties().Select(p => new ListTest { Name = p.Name, Test = p.Value.ToObject<Test>() }).ToList();
使用方法
Test test4 = list.Where(f=>f.Name=="test4").Select(t=>t.Test).FirstOrDefault();
class
public class ListTest
{
public string Name { get; set; }
public Test Test { get; set; }
}
我正在尝试反序列化来自 firebase 实时数据库的响应 get/json,以获取在线用户位置
示例响应:
{
"test1": {
"id": "test-1",
"location": {
"lat": 37.33097983,
"long": -122.03063943
}
},
"test2": {
"id": "test-2",
"location": {
"lat": 37.33021864,
"long": -122.02370753
}
},
"test3": {
"id": "test-3",
"location": {
"lat": 37.32873847,
"long": -122.01980584
}
},
"test4": {
"id": "test-4",
"location": {
"lat": 37.32563464,
"long": -122.01972943
}
},
"test5": {
"id": "test-5",
"location": {
"lat": 37.32472734,
"long": -122.02127163
}
}
}
我将其放入 json 到 c# class 的转换器中,它为每个用户(Test1、Test2、Test3 等)创建了一个 class。如果示例中的用户是响应中的唯一用户,这将起作用。如果我有第六个用户名为“6test”,我还需要为那个用户创建一个 class。
如何使用 Json 转换器(Newtonsoft.Json 或 System.Text.Json)到 return list<User>
你可以在你的情况下使用字典
using Newtosoft.Json;
Dictionary<string,Test> tests = JsonConvert.DeserializeObject<Dictionary<string,Test>>(json);
classes
public class Location
{
public double lat { get; set; }
public double @long { get; set; }
}
public class Test
{
public string id { get; set; }
public Location location { get; set; }
}
使用方法
Test test5=tests["test5"];
或者如果您想使用列表而不是字典
var jsonParsed = JObject.Parse(json);
List<ListTest> list = jsonParsed.Properties().Select(p => new ListTest { Name = p.Name, Test = p.Value.ToObject<Test>() }).ToList();
使用方法
Test test4 = list.Where(f=>f.Name=="test4").Select(t=>t.Test).FirstOrDefault();
class
public class ListTest
{
public string Name { get; set; }
public Test Test { get; set; }
}