NewtonSoft JSONを使用してこのタイプのオブジェクトにデシリアライズする方法は?構造体にはプロパティ型変数が含まれていますが、この構造体に基づいてNewtonSoftを使用すると、このプロパティは別のクラスになります。NewtonSoft Jsonを使用して、変数型プロパティを持つクラスにデシリアライズする方法はありますか?
次のコード例:PACKAGE_ID、以下の構造、フィールド「PACKAGE_ID」のように受信され、このクエリのリターンを送信することが必要であり、このパッケージのデータクエリで
public class RootProduct
{
public Package Package {get; set;}
}
public class Package
{
//Package has a property in which the class type should be changed in order to deserialize
public Package_id ThisValueIsVariable {get; set;}
}
public class Package_id
{
public string product_name {get; set;}
}
( JSON)は、このコードをクエリで送信します。
戻りJSON:
"Package": {
"Package_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
"Package": {
"SecondPackage_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
"Package": {
"ThirdPackage_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
UPDATE:
「PACKAGE_ID」名前を持つ唯一のクラスがあるので、最初の生成物は、逆シリアル化される上記のコードで、及び第二SecondPackage_idクラスが連続して存在しないため、3番目のJSONアイテムはJsonConvert.Deserializeを使用して逆シリアル化されません。
から(複数の)名前付きオブジェクトを取得するには、辞書を使用し – Waaghals
@Waaghalsこのメッセージの意味を「パッケージは、クラスタイプが変更されるべき性質を持っています」返されるJSONのフィールド "package_id"は固定名ではない、つまりフィールドタイプは固定フィールドではなくすべてのバリエーションに同じプロパティが含まれていることを確認してください。その名前はパッケージIDです。JSONタグはパッケージのIDです。リストを照会する場合は別の「名前」が付いていますが、同じクラスです。私はこのダイナミックなことができるようにする方法を見つける必要があるので、Newtonsoftは非直列化するものを理解しています。 –