【问题标题】:Newtonsoft json Deserialize complex object into class with different nameNewtonsoft json将复杂对象反序列化为具有不同名称的类
【发布时间】:2018-11-19 21:23:34
【问题描述】:

JSON 具有复杂的对象,其中一些具有命名空间信息,我如何在反序列化中解释这一点。下面的简化示例

{
  "id": "123456",
  "urn:test:params:scim:schemas:extension:PersonBioExtension": {
    "dateOfBirth": "1900-01-01",
    "gender": "MALE",
  }
}

反序列化代码:

Rootobject user = JsonConvert.DeserializeObject<Rootobject>(textBox1.Text);

类:

public class Rootobject
{
    public string id { get; set; }
    public TestScimSchemasExtensionBio testScimSchemasExtensionBio { get; set; }
}

public class TestScimSchemasExtensionBio
{
    public string dateOfBirth { get; set; }
    public string gender { get; set; }
}

【问题讨论】:

  • 在您的 testScimSchemasExtensionBio 属性上使用 [JsonProperty("urn:test:params:scim:schemas:extension:PersonBioExtension")]

标签: c# json.net deserialization


【解决方案1】:

正如 cmets 中已经提到的,您可以使用 JsonPropertyAttribute 在将属性序列化为 JSON 时更改它们的名称。

Json 字符串:

{
  "id": "123456",
  "urn:test:params:scim:schemas:extension:PersonBioExtension": {
    "dateOfBirth": "1900-01-01",
    "gender": "MALE",
  }
}

型号:

public class Model
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("urn:test:params:scim:schemas:extension:PersonBioExtension")]
    public TestScimSchemasExtensionBio TestScimSchemasExtensionBio { get; set; }
}

public class TestScimSchemasExtensionBio
{
    [JsonProperty("dateOfBirth")]
    public DateTimeOffset DateOfBirth { get; set; }

    [JsonProperty("gender")]
    public string Gender { get; set; }
}

反序列化:

string json = @"{
  ""id"": ""123456"",
  ""urn:test:params:scim:schemas:extension:PersonBioExtension"": {
    ""dateOfBirth"": ""1900-01-01"",
    ""gender"": ""MALE"",
  }
}";

Model model = JsonConvert.DeserializeObject<Model>(json);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多