ネットワーク経由で 3 つの .net オブジェクトを送信しています。
- List<int>
- List<ParentObject>
- string
これは私がシリアライズする方法です(すべてのタイプで同じです):
JsonSerializerSettings JSsettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Arrays
};
string message = JsonConvert.SerializeObject(listOfParents, JSsettings);
//listOfParents is of type List<ParentObject>
ParentObject は抽象クラスで、2 つの子クラスがあります。それが表す子の型を取得するプロパティがあります。
public enum EntityType {Child1, Child2};
class ParentObject
{
public EntityType et { get; set; }
//..other members
}
3 つのオブジェクトのどれが受信されたかに基づいて、3 つの異なる関数を呼び出したいと思います。
Object genericObject = JsonConvert.DeserializeObject(message, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});
if (genericObject is List<int>)
{
List<int> myList= (List<int>)genericObject;
myfunction1(myList);
}
if (genericObject is List<ParentObject>)
{
//etc..
ParentObject は DeserializeObject() で問題を引き起こしています。これは、「ParentObject 型のインスタンスを作成できませんでした。型はインターフェイスまたは抽象クラスであり、インスタンス化できません」と表示されるためです。だから私はhttp://james.newtonking.com/projects/json/help/index.html?topic=html/CustomCreationConverter.htmで CustomCreationConverter を使用する必要があるかもしれないと考えていました
CustomCreationConverter は逆シリアル化中に型を必要としますが、逆シリアル化後まで型をチェックしないため、それでも私の問題は解決しません。
問題を解決するための提案はありますか?