私は次のものを持っています:
public class BaseEntity<T> where T: class
{
public OperationStatus OperationStatus { set; get; }
public List<T> List { set; get; }
protected internal BaseEntity()
{
if (OperationStatus == null)
{
OperationStatus = new OperationStatus();
OperationStatus.IsSuccess = true;
}
this.List = new List<T>();
}
internal BaseEntity(IEnumerable<T> list)
{
if (OperationStatus == null)
{
OperationStatus = new OperationStatus();
OperationStatus.IsSuccess = true;
}
this.List = new List<T>();
foreach (T k in list)
{
this.List.Add(k);
}
}
}
public class KeyValuePair
{
public string key;
public string value;
}
public class KeyValuePairList : BaseEntity<KeyValuePair>
{
public KeyValuePairList() { }
public KeyValuePairList(IEnumerable<KeyValuePair> list)
: base(list) { }
}
// Multiple other classes like KeyValuePair but all have the
// same behavior so they have been derived from BaseEntity
今私のコードでは、JSON文字列をKeyValuePair
リストのインスタンスにマップしようとしていますが、現在は次のように実行しています。
result =
@"{
\"d\": {
\"OperationStatus\": {
\"IsSuccess\": true,
\"ErrorMessage\": null,
\"ErrorCode\": null,
\"InnerException\": null
},
\"List\": [{
\"key\": \"Key1\",
"\value\": \"Value1\"
}, {
\"key\": \"Key2\",
\"value\": \"Value2\"
}]
}
}"
試行#1
JavaScriptSerializer serializer = new JavaScriptSerializer();
KeyValuePairList output = serializer.Deserialize<KeyValuePairList>(result);
ただし、のコンストラクターがKeyValuePairList
引数を指定して呼び出されていないため、これは機能しません。そのコンストラクターを削除すると、JSONシリアル化がエラーで失敗しますNo parameterless constructor found
。呼び出しでテンプレートとしてKeyValuePairList
使用するように指示するにはどうすればよいですか?KeyValuePair
または、この目的のためにJSONシリアライザーをどのように適応させることができますか?
試行#2
私も次のように試しJSON.net
ました:
var oo = JsonConvert.DeserializeObject<KeyValuePairList>(result);
これを機能させる方法について何か提案はありますか?