Saya tidak yakin bagaimana cara mencari bantuan dan ini agak tidak biasa. Saya setuju, jadi mohon maaf. Saya akan mencoba menjelaskannya seperti di bawah ini:
• Saya menggunakan JSON menggunakan POST dan mendapatkan objek dinamis. Saya perlu mengonversi semua properti yang masuk dalam objek dinamis menjadi huruf besar.
• Saya menggunakan apa yang menurut saya merupakan solusi yang pasti. Saya mengonversi JSON ke Kamus string, lalu memasukkan nilai ke dalam kamus baru setelah mengonversi Kunci menjadi Key.ToUpper() dan kemudian membatalkan serialisasinya kembali menjadi objek dinamis.
Solusi yang berfungsi saat ini adalah sebagai berikut:
string _StrJSON = @"{""FIELDA"" : ""1234"",""fieldb"" : ""OtherValue""}";
var d = JsonConvert.DeserializeObject<Dictionary<string, string>>(_StrJSON);
d.ContainsKey("FIELDB").Dump(); // returns false, obviously.
Dictionary<string, string> dr = new Dictionary<string, string>();
d.ToList().ForEach(r => dr.Add(r.Key.ToUpper(), r.Value));
dr.Dump("dr"); // FIELDA 1234 - FIELDB OtherValue
var a = JsonConvert.SerializeObject(dr);
a.Dump(); // {"FIELDA":"1234","FIELDB":"OtherValue"}
Ini bekerja.
[EDIT] Beberapa kebingungan tentang "var" saya di atas dan hal lainnya. Saya sangat jelas tentang apa yang dinamis dan apa yang tidak. [/EDIT]
Yang sudah saya coba sejauh ini yang TIDAK BEKERJA adalah seperti di bawah ini:
namespace Newtonsoft.Json
{
/// <summary>
/// Converts JSON keys to uppercase.
/// </summary>
public class UppercaseContractResolver : Serialization.DefaultContractResolver
{
#region Methods.
#region Public Methods.
/// <summary>
/// Resolves property name for this JSON object.
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
protected override string ResolvePropertyName(string key)
{
return key.ToUpper();
}
#endregion
#endregion
#region Constructors.
/// <summary>
/// Converts JSON keys to uppercase.
/// </summary>
public UppercaseContractResolver()
{
}
#endregion
}
/// <summary>
/// Wrapper for Newtonsoft.Json.JsonConvert for JSON keys as uppercase.
/// </summary>
public static class JsonConvertUpper
{
#region Members.
#endregion
#region Methods.
#region Public Methods.
/// <summary>
/// Tries to serialize specified object with JSON keys in upper case.
/// <para>e.g. "key":value should become "KEY":value by using this method.</para>
/// </summary>
/// <param name="value">Object.</param>
/// <returns></returns>
public static string SerializeObjectUpper(object value)
{
return JsonConvert.SerializeObject(value, new JsonSerializerSettings
{
ContractResolver = new UppercaseContractResolver()
});
}
/// <summary>
/// Tries to Deserialize specified object with JSON keys in upper case.
/// <para>e.g. "key":value should become "KEY":value by using this method.</para>
/// </summary>
/// <param name="strValue">String.</param>
/// <returns></returns>
public static object DeserializeObjectUpper(string strValue)
{
// DeserializeObject does not allow uppercase properties. So use SerializeObjectUpper and then deserialize.
var value = JsonConvert.DeserializeObject(strValue);
string strJSON = SerializeObjectUpper(value);
return JsonConvert.DeserializeObject(strJSON, new JsonSerializerSettings()
{
ContractResolver = new UppercaseContractResolver()
});
}
#endregion
#endregion
}
}
Panggilan metode di atas adalah:
dynamic json = JsonConvertUpper.DeserializeObjectUpper(_StrJSON);
if (json.CTN== null)
{...}
[EDIT] Harap diperhatikan bahwa saya tidak memiliki kelas karena kunci JSON harus diperlakukan sebagai UPPERCASE dan kelas serta kode lain dll semuanya ada di ProperCase. [/EDIT]
Adakah cara untuk melakukannya di dalam JsonConvert? Untuk menghindari patch manual saya? Bantuan apa pun dihargai. Terima kasih.
JsonProperty
di kelas Anda - person Ňɏssa Pøngjǣrdenlarp   schedule 03.03.2016