変換先のオブジェクトにデフォルト (空の) コンストラクターがあることを確認してください。
経験則: オブジェクトにデシリアライズする場合は、オブジェクトを簡単に作成できるようにする必要があります。これらのガイドラインは次のことに役立ちます。
たとえば、この JSON 文字列/オブジェクト:
{ Name: "John Doe", Phone: "123-456-7890", Pets: [ "dog", "cat", "snake" ] }
次のクラスからオブジェクトに変換できます。
public class Person {
public string Name { get; set; }
public string Phone { get; set; }
public string[] Pets { get; set; }
}
またはこれ:
public class Person {
public string Name { get; set; }
public string Phone { get; set; }
public string[] Pets { get; set; }
public Person() {}
public Person(string name, string phone) {
Name = name;
Phone = phone;
}
}
またはこれ:
public class Person {
public string Name { get; set; }
public string Phone { get; set; }
public string[] Pets { get; set; }
public Person() {}
}
しかし、これではありません
public class Person {
public string Name { get; set; }
public string Phone { get; set; }
public string[] Pets { get; set; }
public Person(string name, string phone) {
Name = name;
Phone = phone;
}
}
あとは ASP.NET MVC 4 に任せましょう
public class PersonController : ApiController
{
// .. other actions
public HttpResponseMessage PostPerson(Person person)
{
if ( null != person)
// CELEBRATE by doing something with your object
else
// BE SAD and throw and exception or pass an error message
}
// .. other actions
}
クラスがデフォルトのコンストラクターを持てない場合、またはクラスのソース コードにアクセスできない場合は、アダプター クラスを作成できます。
- デフォルトのコンストラクタがあります
- 公開する必要があるプロパティを公開します
上記の Person クラスをデフォルトのコンストラクターなしで使用すると、アダプターは次のようになります。
public class PersonAdapter {
public Person personAdaptee;
public string Name {
get { return personAdaptee.Name; }
set { personAdaptee.Name = value }
}
public string Phone {
get { return personModel.Phone; }
set { personModel.Phone = value; }
}
public string[] Pets {
get { return personAdaptee.Pets; }
set {personAdaptee.Pets = value }
}
public PersonAdapter() {
personAdaptee = new Person("", "", null);
}
}
あとは ASP.NET MVC 4 に任せましょう
public class PersonController : ApiController
{
// .. other actions
public HttpResponseMessage PostPerson(PersonAdapter person)
{
if ( null != person)
// CELEBRATE by doing something with your object
else
// BE SAD and throw and exception or pass an error message
}
// .. other actions
}