Diberikan json berikut

{
    "$$href": "http://localhost:8080/url1",
    "name": "Sebastian Slutzky"
}

Saya ingin deserialize menjadi objek seperti ini

public class DomainObject
{
    [JsonProperty("$$href")]
    public string href { get; set; }
    public JObject this[string key] => throw new NotImplementedException();
 }

Sehingga properti arbitrer (seperti name dapat diakses secara dinamis)

 var href = domainObject.href;
 var name = domainObject["name"] as string;

Implementasi saya saat ini adalah dengan meneruskan JObject ke konstruktor objek saya, dan menghiasnya (yaitu komposisi). Apakah ada cara untuk menyelesaikan ini dengan pewarisan (yaitu dengan memperluas JObject? Ada solusi lain?

0
Sebastian Slutzky 18 Maret 2020, 10:03

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan JsonExtensionData. Sebagai contoh

public class DomainObject
{
    [JsonProperty("$$href")]
    public string href { get; set; }
    [JsonExtensionData]
    private IDictionary<string, JToken> UnknownTypes;

    public JToken this[string key] => UnknownTypes[key];
}

Pengindeks sekarang memungkinkan Anda untuk mengambil nilai properti dinamis dengan kunci sebagai berikut.

var result = JsonConvert.DeserializeObject<DomainObject>(json);
var name = result["name"].Value<string>();
1
Anu Viswan 18 Maret 2020, 07:10