![](/img/trans.png)
[英]How to Json Element is present or not using C# (With Newtonsoft NugetPackages)
[英]C# Reference earlier JSON element - Newtonsoft
我正在序列化具有List<X>
和Dictionary<X, Y>
。
List<X>
正在序列化,沒有任何問題。 為了序列化字典,我實現了一個自定義轉換器。
class XYDictionaryConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(Dictionary<X, Y>).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jObject = JObject.Load(reader);
Dictionary<X, Y> dictionary = new Dictionary<X, Y>();
foreach (JProperty property in jObject.Properties())
{
X key = //Get Y using property.Name
if (key != null)
{
dictionary.Add(key, property.Value.ToObject<Y>());
}
}
return dictionary;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
IDictionary<X, Y> dictionary = (IDictionary<X, Y>)value;
JObject jObject = new JObject();
foreach (var kvp in dictionary)
{
jObject.Add(kvp.Key.name, kvp.Value == null ? null : JToken.FromObject(kvp.Value));
}
jObject.WriteTo(writer);
}
}
問題是我不知道如何在轉換器中引用List<X>
。 假設JSON是線性反序列化的,那么List<X>
應該已經反序列化了,但是由於DeserializeObject()
方法尚未完成,因此我對此沒有任何引用。
我將如何解決這個問題?
最后,我的解決方案是更改存儲“ X”的方式。 我沒有將字典的鍵存儲為json中的鍵,而是將每個鍵值對存儲為數組項。
每個項目然后是: { "key": { "$ref" : 5 } "value": { "$ref" : 10 } }
對於編寫,這只是使用JArray
, JObject
和JToken.FromObject
(確保傳遞序列化器。
為了閱讀, jObject.GetValue("Key").ToObject<X>(serializer)
表現出色。
希望這對某人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.