4
私のプロジェクトでこの問題が発生しました。テーブルからjson文字列があります。これはシリアル化されたエンティティです。
JSONタイプを認識しないデシリアライズエンティティ
{
"Entity":{
"__type":"Book:#Definition",
"BookId":3,
"BookName":"Meloon Dreams",
"Type":2,
"Price":35
}
}
ブッククラス
namespace Definition
{
[DataContract]
public class Book : IEntity
{
[DataMember]
public int BookId { get; set; }
[DataMember]
public string BookName { get; set; }
[DataMember]
public BookType Type { get; set; }
[DataMember]
public decimal Price { get; set; }
}
}
ワークフロークラス
public class Workflow
{
public int WorkflowId { get; set; }
public IEntity Entity { get; set; }
}
ので、コントローラクラスで私がTABLからJSON文字列を取得しますeと私はそれを自分のタイプに逆直列化したい。しかし、__タイプだけがjson文字列の中でそのタイプに役立ちます。私は何を意味することは、私がの代わりにIEntity
を帳を配置する必要があり
workflow.Entity = Serializer.JsonDeserialize<IEntity>(jsonString);
あるクラスの構造を変えずにいる可能性がある、またはそれは、JSONから型を取得し、それを変換することが可能ですタイプし、代わりにIEntityを入れますか?
質問は少し助けたけど、私のプロジェクトで、私はジェネリッククラスを使用していないです。つまり、ワークフローエンティティプロパティにジェネリックタイプではなく明示タイプが必要です。だから私は独自の型にjsonエンティティを変換し、デシリアライザに渡す必要があります。しかし、私はこの反省について検査し続けます。ありがとう。 – ibubi
コードサンプルで回答を更新し、さらに適切なリンク(MakeGenericMethodメソッドについて)を変更しました。うまくいけば助かります – Kel
自分のクラス構造を自分の目的に合わせて変更する必要がありました。 jsonで変換されるエンティティの種類はjsonに保持されていたので、それはパラドックスです。型を取得するためにjsonを文字列メソッドで解析する必要があるため、クラス構造を変更することにしました。しかし、私はこの方法を使って目的を達成し、トピックをカバーしているので、私はこのポストを答えとしてマークしました。とにかくありがとう。 – ibubi