Sou iniciante em C#. Estou tentando converter uma string JSON em uma lista parecida com esta:
firstName lastName departmentID
John Doe AAA111
John2 Doe2 BBB222
Postagem atualizada - com base na resposta do David (obrigado por isso). Desculpe por toda a confusão que posso ter causado.
Aqui está o código:
public IActionResult JsonTest()
{
var respJSON = @"
[
{
""firstName"": ""John"",
""lastName"": ""Doe"",
""departmentID"": { ""id"": ""AAA111"" },
},
{
""firstName"": ""John2"",
""lastName"": ""Doe2"",
""departmentID"": { ""id"": ""BBB222"" }
}
]
";
List<UserNameWithDept> user = JsonConvert.DeserializeObject<List<UserNameWithDept>>(respJSON);
return Ok();
}
public class Identifier
{
[JsonProperty("id")]
public string Id { get; set; }
}
public class UserNameWithDept
{
[JsonProperty("firstName")]
public string FirstName { get; set; }
[JsonProperty("lastName")]
public string LastName { get; set; }
[JsonProperty("departmentID")]
public Identifier Department { get; set; }
}
Estou pegando o Departamento como um objeto e então o valor dentro dele.
Como posso fazer a lista ficar assim? Departamento tem valor, não objeto.
Department "AAA111"
FirstName "John"
LastName "Doe"
Com base em um comentário sobre a pergunta acima:
Em seguida, basta modificar a estrutura para corresponder aos dados. Atualmente, espera-se
departmentID
que sejastring
:Mas os dados são uma string? Não:
O
departmentID
valor é um objeto com uma propriedade (chamadaid
) e essa é uma string. Então, corresponda a isso na sua estrutura de objeto:Depois, você pode desserializar os dados nessa estrutura da mesma forma que faz atualmente.
Edição: Vale a pena chamar a atenção para o comentário abaixo . Convenções de nomenclatura podem ser importantes à medida que o código se torna mais complexo, pois ajudam os leitores a entendê-lo rapidamente. Para isso, nomes de propriedades em C# devem ser escritos com letra maiúscula.
Você pode usar o
JsonProperty
atributo para indicar o nome da propriedade correspondente nos dados quando ele não corresponder ao que está na estrutura. Por exemplo:Observe também que a propriedade "peoperty"
UserNameWithDept
foi alterada para simplesmente "Department
. Considere o código que referenciaria essa propriedade. Seria redundante indicar "id" duas vezes para referenciar um identificador. Isso também sugere que o objeto usado talvez possa, algum dia, conter mais do que apenas um identificador.A nomenclatura se torna muito subjetiva rapidamente, então estas são apenas sugestões, mas, no fim das contas, cabe a você decidir quais nomes intuitivamente fazem sentido na sua aplicação. E vale a pena dedicar um tempo para isso, pois variáveis/propriedades/classes/etc. com nomes inadequados são uma fonte muito comum de bugs.