Saya telah mengikuti string JSON yang diterima dari pihak eksternal.
{
"team":[
{
"v1":"",
"attributes":{
"eighty_min_score":"",
"home_or_away":"home",
"score":"22",
"team_id":"500"
}
},
{
"v1":"",
"attributes":{
"eighty_min_score":"",
"home_or_away":"away",
"score":"30",
"team_id":"600"
}
}
]
}
Kelas pemetaan saya:
public class Attributes
{
public string eighty_min_score { get; set; }
public string home_or_away { get; set; }
public string score { get; set; }
public string team_id { get; set; }
}
public class Team
{
public string v1 { get; set; }
public Attributes attributes { get; set; }
}
public class RootObject
{
public List<Team> team { get; set; }
}
Pertanyaannya adalah saya tidak suka Attributes
nama kelas danattributes
bidang di Team
kelas. Sebagai gantinya, saya ingin diberi nama TeamScore
dan juga untuk menghapus _
dari nama bidang dan memberikan nama yang tepat.
JsonConvert.DeserializeObject<RootObject>(jsonText);
Saya bisa mengganti nama Attributes
menjadi TeamScore
, tetapi jika saya mengubah nama bidang ( attributes
di Team
kelas), itu tidak akan deserialize dengan benar dan memberi saya null
. Bagaimana saya bisa mengatasi ini?
Jawaban:
Json.NET memiliki
JsonPropertyAttribute
yang memungkinkan Anda menentukan nama properti JSON, jadi kode Anda harus:Dokumentasi: Atribut Serialisasi
sumber
Jika Anda ingin menggunakan pemetaan dinamis, dan tidak ingin mengacaukan model Anda dengan atribut, pendekatan ini bekerja untuk saya
Pemakaian:
Logika:
sumber
Menambah solusi Jacks. Saya perlu Deserialize menggunakan JsonProperty dan Serialize sambil mengabaikan JsonProperty (atau sebaliknya). ReflectionHelper dan Attribute Helper hanyalah kelas pembantu yang mendapatkan daftar properti atau atribut untuk properti. Saya dapat menyertakan jika ada yang benar-benar peduli. Dengan menggunakan contoh di bawah ini Anda dapat membuat serial viewmodel dan mendapatkan "Jumlah" meskipun JsonProperty adalah "RecurringPrice".
Pemakaian:
Model:
sumber
CreateProperty
dalam ContractResolver. Ada panggilan pangkalan:var jsonProperty = base.CreateProperty(memberInfo, memberSerialization);
dan kemudian aturjsonProperty.PropertyName = memberInfo.Name;
. Akhirnya hanyareturn jsonProperty;
itu yang kamu butuhkan.Memperluas jawaban Rentering.com , dalam skenario di mana seluruh grafik berbagai jenis harus dijaga, dan Anda sedang mencari solusi yang sangat diketik, kelas ini dapat membantu, lihat penggunaan (lancar) di bawah ini. Ini beroperasi sebagai daftar hitam atau daftar putih per jenis. Tipe tidak boleh keduanya ( Intisari - juga berisi daftar abaikan global).
Pemakaian:
sumber
Saya menggunakan atribut JsonProperty ketika membuat cerita bersambung tetapi mengabaikannya saat melakukan deserialisasi menggunakan ini
ContractResolver
:The
ContractResolver
hanya menetapkan setiap kembali properti untuk nama properti kelas (disederhanakan dari solusi Shimmy ini). Pemakaian:sumber