的名字,我收到一個JSON這樣的:CustomConverter不工作得到對象
{
"Bryan": {
"age": 25,
"city": "Miami"
},
"Jeff": {
"age": 24,
"city": "Tokyo"
}
}
我想反序列化得到一個list<String>
的人的名字。 所以我有一個CustomJsonConverter
:
public class JsonObjectsToListConverter : JsonConverter
{
public JsonObjectsToListConverter()
{
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(HashSet<String>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken jtoken = JToken.Load(reader);
JObject jObjectCast = jtoken.Value<JObject>();
List<String> listPers = (from prop in jObjectCast.Properties()
select prop.Name).ToList();
return listPers;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
,並列出成員的人等級:
public class Persons
{
[JsonConverter(typeof(JsonObjectsToListConverter))]
public List<String> listPers { get; set; }
}
的問題是,CustomConverter返回NULL,除非我添加父對象轉換爲JSON,如:
{"listP":
{
"Bryan":{
....
and [JsonProperty("listP")]
in Persons Class。
我不明白在反序列化過程中會發生什麼,以及爲什麼在沒有PropertyName
屬性的情況下無法正常工作。
但是,如果我用我的轉換器進行反序列化JSON另一個在每個例子「動物」類中的成員列表相同的結構。我能怎麼做 ?最後,要有一個通用的「轉換器」。 – Neyoh
這是一個權衡。您可以編寫一些通用的將類似結構化數據的數組轉換爲名稱列表的方法,也可以爲每個特定的類創建轉換。在第一種情況下,你必須在json中指定數組名稱。在第二部分中,您可以創建一個轉換器的繼承層次結構,將實際的邏輯轉移到一個基類中,這也可能(令人驚訝!)是一個單獨的列表轉換器。但是我沒有看到你什麼時候需要將「Bryans」和「Jeffs」列表轉換爲動物列表...... – galenus