Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将JSON对象a转换为JSON B对象,其中B是a的严格子集。两者都由两个JSON模式管理。在.net内核中_C#_Json_.net Core_Jsonschema - Fatal编程技术网

C# 将JSON对象a转换为JSON B对象,其中B是a的严格子集。两者都由两个JSON模式管理。在.net内核中

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中不存在的属性?我想知

我需要进行一系列转换,将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反序列化到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没问题,如果你觉得我的答案有用,请把它投上去