Heim >Backend-Entwicklung >C++ >Wie kann ich verschachtelte JSON -Eigenschaften in Klasseneigenschaften in C#abbilden?

Wie kann ich verschachtelte JSON -Eigenschaften in Klasseneigenschaften in C#abbilden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-24 23:06:10442Durchsuche

How to Map Nested JSON Properties to Class Properties in C#?

Die Sub -attributes des JSON -Objekts dem Klassenattribut

abbilden

Wenn Sie auf JSON -Daten mit einer geschichteten Struktur stoßen, möchten Sie möglicherweise die Sub -attributes von JSON -Komplexobjekten den einfachen Attributen in der Klasse abbilden. Obwohl das Framework von newtonsoft.json [DataMember] die ursprünglichen JSON -Daten

Attribute enthält, unterstützt es keine Zuordnungsattribute.

JObject Es gibt jedoch einige Möglichkeiten, diese Zuordnung zu erreichen. Eine einfache Methode besteht darin, JSON zurück zu SelectToken zu sequenzieren und

zu verwenden, um die erforderlichen Sub -Attributes abzurufen.

Betrachten Sie beispielsweise die folgenden JSON -Daten:
<code class="language-json">{
    "picture": {
        "id": 123456,
        "data": {
            "type": "jpg",
            "url": "http://www.someplace.com/mypicture.jpg"
        }
    }
}</code>

url Um die ProfilePicture -attribute von sub -attributes in die Klasse zuzuordnen, können Sie den folgenden Code verwenden:

<code class="language-csharp">string json = @"
{
    ""picture"": 
    {
        ""id"": 123456,
        ""data"": 
        {
            ""type"": ""jpg"",
            ""url"": ""http://www.someplace.com/mypicture.jpg""
        }
    }
}";

JObject jo = JObject.Parse(json);
Person p = jo.ToObject<Person>();
p.ProfilePicture = (string)jo.SelectToken("picture.data.url");</code>

Wenn Sie eine fortgeschrittenere Lösung benötigen, können Sie JsonConverter anpassen, um JsonProperty wie erwartet zu aktivieren. Dieser Konverter füllt alle Attribute mit dem im Attribut angegebenen Pfad.

Betrachten Sie beispielsweise die folgenden JSON -Daten:

<code class="language-json">{
  "name": "Joe Shmoe",
  "age": 26,
  "picture": {
    "id": 123456,
    "data": {
      "type": "jpg",
      "url": "http://www.someplace.com/mypicture.jpg"
    }
  },
  "favorites": {
    "movie": {
      "title": "The Godfather",
      "starring": "Marlon Brando",
      "year": 1972
    },
    "color": "purple"
  }
}</code>

Um JSON zu verwirklichen und die Sub -Attributes den einfachen Attributen in der Klasse zuzuordnen, können Sie den folgenden benutzerdefinierten Konverter verwenden:

<code class="language-csharp">[JsonConverter(typeof(JsonPathConverter))]
class Person
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("age")]
    public int Age { get; set; }

    [JsonProperty("picture.data.url")]
    public string ProfilePicture { get; set; }

    [JsonProperty("favorites.movie")]
    public Movie FavoriteMovie { get; set; }

    [JsonProperty("favorites.color")]
    public string FavoriteColor { get; set; }
}</code>

Mit einem benutzerdefinierten Konverter können Sie den JSON wie gewohnt wie gewohnt neu kehren:

<code class="language-csharp">Person p = JsonConvert.DeserializeObject<Person>(json);</code>

Das obige ist der detaillierte Inhalt vonWie kann ich verschachtelte JSON -Eigenschaften in Klasseneigenschaften in C#abbilden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn