C # Как преобразовать дочерние объекты сложного объекта JSON в модель - PullRequest
1 голос
/ 28 марта 2019

Я конвертирую из модели и сериализую ее для отправки на веб-страницу, где JSON затем редактируется.После редактирования я использую AJAX для отправки обновленного JSON в код, где мне нужно преобразовать его обратно в исходную модель.После сериализации модели в первый раз она поддерживает массив JSON, а затем объекты JSON.После использования JSON.Stringify массив JSON превращается в объект JSON из объектов JSON.Я имею дело с несколькими объектами JSON, которые отображаются и редактируются для отправки в код позади.Полученная строка имеет формат

{"0":

    {"Id":{},
    "ItemNumber":"1",
    "Person":{
        "PersonNumber": "001",
        "Address": {
            "Street": "Test street 123"
            },
        "email": "test@email.com"
        },
    "Contact": {
        "Name" : "Company A"
        },
    "Quantity" : "12"
    },
"1": etc,
}

. Я хочу просмотреть каждое число, которое действует как ключ для объекта, однако попытка сопоставить его со словарем или десериализацией объекта превращает данные в {{ "Id":{}, "ItemNumber" : "1", "Person": {etc }} Я думаю, что я так долго смотрю на проблему, решение у меня перед глазами, и я слишком обдумываю это, я просто не могу найти правильный способ получить информацию в форме, которая соответствуетмодель, которую я пытаюсь преобразовать в.

Использование JsonConvert для десериализации в Dictionary<string,Object> очень близко подходит ко мне, но я все же сталкиваюсь с проблемой

{
    {
    "Id":{},
    "ItemNumber":"1", 
    etc
    }
}

для одного объекта.Если я смогу убрать внешний слой скобок для каждого объекта, я считаю, что это будет правильный формат, но я не знаю, как это сделать.Я чувствую, что поступаю неправильно, возможно, есть более простой способ индексирования объекта Json с помощью цикла for.Есть ли метод, принадлежащий JsonConvert / JObject, который может помочь или сделать это преобразование чище, может быть, что-то из JToken?

Вот некоторый код из Code Behind.

[WebMethod]
public static string UpdateItems(string json) //json = {"0":{"Id": etc}}
{
    var result = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); // returns key "0", value { { Format my desired model is in } }
// My goal is to convert it back to the original object like
// JsonConvert.DeserializeObject<Dictionary<string, OriginalModel>> rather than creating a new class
}

1 Ответ

3 голосов
/ 28 марта 2019

Вы можете создавать классы из вашего json с помощью этого сайта или Visual Studio:

public class Id
{
}

public class Address
{
    public string Street { get; set; }
}

public class Person
{
    public string PersonNumber { get; set; }
    public Address Address { get; set; }
    public string email { get; set; }
}

public class Contact
{
    public string Name { get; set; }
}

public class NestedObject
{
    public Id Id { get; set; }
    public string ItemNumber { get; set; }
    public Person Person { get; set; }
    public Contact Contact { get; set; }
    public string Quantity { get; set; }
}

Теперь вы можете десериализовать ваш ввод:

var input = "{\"0\":      {\"Id\":{},     \"ItemNumber\":\"1\",     \"Person\":{         \"PersonNumber\": \"001\",         \"Address\": {             \"Street\": \"Test street 123\"             },         \"email\": \"test@email.com\"         },     \"Contact\": {         \"Name\" : \"Company A\"         },     \"Quantity\" : \"12\"     },  }";
var result = JsonConvert.DeserializeObject<Dictionary<string, NestedObject>>(input);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...