Преобразуйте JSON-объект A в JSON-B-объект, где B является строгим подмножеством A. Обе управляются двумя схемами JSON. В ядре .net - PullRequest
0 голосов
/ 01 ноября 2018

Я получил несколько преобразований, чтобы преобразовать структуру данных JSON из надмножества в подмножество. EX:

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.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Вы можете использовать наследование для приведения объектов из подкласса в другой класс.

Учитывая следующее json

{
    "Name": 
    {
        "first": "bob",
        "middle": "john",
        "last" : "bobster"
    }
}

Вы можете создать несколько классов C #, соответствующих структуре json, следующим образом:

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
  • класс Model обладает свойством типа FullName (т.е. наиболее конкретный объект)

Вы можете десериализовать объект типа Модель, а затем привести свойство Name следующим образом:

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);
0 голосов
/ 01 ноября 2018

Создать объект для подмножества, например:

public class Name{
public string first{get;set;}
public string last {get;set;}
}

Десериализовать JSON в объект подмножества:

var test = JsonConvert.DeserializeObject<Name>(superset);

Затем вы можете использовать это для преобразования обратно в json, если это необходимо:

JsonConvert.SerializeObject(subset)
...