の名前を取得するために働くことはありません。CustomConverterは、私はこのようなJSONを受け取るオブジェクト
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();
}
}
と一覧部材とPersonクラス: は、だから私はCustomJsonConverter
持っ
public class Persons
{
[JsonConverter(typeof(JsonObjectsToListConverter))]
public List<String> listPers { get; set; }
}
問題は、私のようなJSONに親オブジェクトを追加する場合を除き、CustomConverterリターンヌル:
人物クラスの{"listP":
{
"Bryan":{
....
と[JsonProperty("listP")]
です。
デシリアライズ時に何が起こるのか理解できず、なぜPropertyName
属性なしで正しく動作しないのですか。
しかし、コンバータを使用して、例の 'Animals'クラスのメンバーリストで同じ構造の別のJSONを逆シリアル化するとします。どのようにできるのか ?最後に、一般的な「コンバータ」を使用する。 – Neyoh
これはトレードオフです。同様に構造化されたデータの配列を名前のリストに変換するための一般的なものを書くか、または特定のクラスごとに変換したものを作成します。最初のケースでは、jsonで配列名を指定する必要があります。 2番目の方法では、コンバーターの継承階層を作成し、実際のロジックを基本クラスに移動させることができます。しかし、あなたが "ブライアン"と "ジェフ"のリストを動物のリストに変換する必要があるときは私は見ません... – galenus