将 JSON 对象 A 转换为 JSON B 对象,其中 B 是 A 的严格子集。两者都由两个 json 模式控制。在 .net 核心中
Convert a JSON object A to JSON B object where B is a strict subset of A. Both governed by two json schemas. In .net core
我进行了一系列转换,以便将 JSON 数据结构从超集转换为子集。例如:
A :
{
Name {
first: bob
middle: john
last : bobster
}
}
B :
{
Name {
first: bob
last : bobster
}
}
两者都有一个 json 模式来描述它们的结构,并且结构完全相同,只是 B 只是缺少 A 的一些属性
有没有关于将 A 映射到 B 的简单方法的想法(实质上是从 A 中剥离 B 中不存在的属性)?我想知道是否有一些库或 C# 语言功能可以使这变得微不足道。
使用 C# 和 .NET Core。
为子集创建一个对象,如:
public class Name{
public string first{get;set;}
public string last {get;set;}
}
将json反序列化为子集对象:
var test = JsonConvert.DeserializeObject<Name>(superset);
如果需要,您可以使用它转换回 json:
JsonConvert.SerializeObject(subset)
您可以使用继承将对象从子class 转换为另一个class。
鉴于以下 json
{
"Name":
{
"first": "bob",
"middle": "john",
"last" : "bobster"
}
}
您可以创建一些匹配 json 结构的 C# classes,如下所示:
public class Model
{
public FullName Name { get; set; }
}
public class Name
{
[JsonProperty("first")]
public string First { get; set; }
[JsonProperty("last")]
public string Last { get; set; }
}
public class FullName : Name
{
[JsonProperty("middle")]
public string Middle { get; set; }
}
请注意:
FullName
继承自 Name
- class
Model
有一个 属性 类型 FullName
(即最具体的对象)
您可以反序列化模型类型的对象,然后按如下方式转换 Name
属性:
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
编辑
作为替代方案,您可以创建一个通用 class,如下所示
public class Model<TName> where TName : Name
{
public TName Name { get; set; }
}
反序列化 json:
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
var fullName = JsonConvert.DeserializeObject<Model<FullName>>(json);
var name = JsonConvert.DeserializeObject<Model<Name>>(json);
我进行了一系列转换,以便将 JSON 数据结构从超集转换为子集。例如:
A :
{
Name {
first: bob
middle: john
last : bobster
}
}
B :
{
Name {
first: bob
last : bobster
}
}
两者都有一个 json 模式来描述它们的结构,并且结构完全相同,只是 B 只是缺少 A 的一些属性
有没有关于将 A 映射到 B 的简单方法的想法(实质上是从 A 中剥离 B 中不存在的属性)?我想知道是否有一些库或 C# 语言功能可以使这变得微不足道。
使用 C# 和 .NET Core。
为子集创建一个对象,如:
public class Name{
public string first{get;set;}
public string last {get;set;}
}
将json反序列化为子集对象:
var test = JsonConvert.DeserializeObject<Name>(superset);
如果需要,您可以使用它转换回 json:
JsonConvert.SerializeObject(subset)
您可以使用继承将对象从子class 转换为另一个class。
鉴于以下 json
{
"Name":
{
"first": "bob",
"middle": "john",
"last" : "bobster"
}
}
您可以创建一些匹配 json 结构的 C# classes,如下所示:
public class Model
{
public FullName Name { get; set; }
}
public class Name
{
[JsonProperty("first")]
public string First { get; set; }
[JsonProperty("last")]
public string Last { get; set; }
}
public class FullName : Name
{
[JsonProperty("middle")]
public string Middle { get; set; }
}
请注意:
FullName
继承自Name
- class
Model
有一个 属性 类型FullName
(即最具体的对象)
您可以反序列化模型类型的对象,然后按如下方式转换 Name
属性:
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
编辑
作为替代方案,您可以创建一个通用 class,如下所示
public class Model<TName> where TName : Name
{
public TName Name { get; set; }
}
反序列化 json:
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
var fullName = JsonConvert.DeserializeObject<Model<FullName>>(json);
var name = JsonConvert.DeserializeObject<Model<Name>>(json);