C# 将JSON对象a转换为JSON B对象,其中B是a的严格子集。两者都由两个JSON模式管理。在.net内核中
我需要进行一系列转换,将JSON数据结构从超集转换为子集。例:C# 将JSON对象a转换为JSON B对象,其中B是a的严格子集。两者都由两个JSON模式管理。在.net内核中,c#,json,.net-core,jsonschema,C#,Json,.net Core,Jsonschema,我需要进行一系列转换,将JSON数据结构从超集转换为子集。例: A : { Name { first: bob middle: john last : bobster } } B : { Name { first: bob last : bobster } } 两者都有一个json模式来描述它们的结构,结构完全相同,就是B只是缺少a中的一些属性 有没有一种简单的方法可以将A映射到B,从A中去掉B中不存在的属性?我想知
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反序列化到subset对象:
var test = JsonConvert.DeserializeObject<Name>(superset);
为子集创建一个对象,如:
public class Name{
public string first{get;set;}
public string last {get;set;}
}
将json反序列化到subset对象:
var test = JsonConvert.DeserializeObject<Name>(superset);
您可以使用继承将对象从一个子类强制转换为另一个类 给定以下json
{
"Name":
{
"first": "bob",
"middle": "john",
"last" : "bobster"
}
}
您可以创建一些与json结构匹配的C类,如下所示:
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; }
}
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
请注意:
FullName继承自Name
类模型具有FullName类型的属性,即最特定的对象
您可以反序列化Model类型的对象,然后强制转换Name属性,如下所示:
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; }
}
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
编辑
作为替代方案,您可以创建一个泛型类,如下所示
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
{
"Name":
{
"first": "bob",
"middle": "john",
"last" : "bobster"
}
}
您可以创建一些与json结构匹配的C类,如下所示:
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; }
}
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
请注意:
FullName继承自Name
类模型具有FullName类型的属性,即最特定的对象
您可以反序列化Model类型的对象,然后强制转换Name属性,如下所示:
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; }
}
string json = @"{
""Name"":
{
""first"": ""bob"",
""middle"": ""john"",
""last"" : ""bobster""
}
}";
Model model = JsonConvert.DeserializeObject<Model>(json);
Name name = model.Name as Name;
编辑
作为替代方案,您可以创建一个泛型类,如下所示
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);
谢谢!我太专注于映射对象了,以至于没想到会有这么简单的事情!谢谢!我太专注于映射对象了,以至于没想到会有这么简单的事情@GregBalajewicz没问题,如果你找到我的答案,请投我一票useful@GregBalajewicz没问题,如果你觉得我的答案有用,请把它投上去