DataContractJsonSerializerを使用してJSON文字列をクラスに変換しますが、常に空のオブジェクトを返します。 メモ帳で 'JSON Viewer'拡張子を持つ文字列をテストしましたが有効です。長い間バグを探して、他の例を比較しました。DataContractJsonSerializerが機能しない
これは短縮形で私のJSON文字列です:
{
"error":[],
"result": {
"BCH": {"aclass":"currency","altname":"BCH","decimals":10,"display_decimals":5},
"DASH": {"aclass":"currency","altname":"test"}
}
}
クラスGetAssetInfoResponseとAssetInfoデータメンバー属性を持つプロパティが含まれていますが、プロパティ結果(逆シリアル化後)が含まれていません任意のオブジェクト。
[DataContract]
[KnownType(typeof(AssetInfo))]
public class GetAssetInfoResponse
{
[DataMember(Name = "error")]
public List<string> Error { get; set; }
[DataMember(Name = "result")]
public List<Dictionary<string, AssetInfo>> Result { get; set; }
}
[DataContract]
public class AssetInfo
{
/// <summary>
/// Alternate name.
/// </summary>
[DataMember(Name = "altname")]
public string Altname { get; set; }
/// <summary>
/// Asset class.
/// </summary>
[DataMember(Name = "aclass")]
public string Aclass { get; set; }
/// <summary>
/// Scaling decimal places for record keeping.
/// </summary>
[DataMember(Name = "decimals")]
public int Decimals { get; set; }
/// <summary>
/// Scaling decimal places for output display.
/// </summary>
[DataMember(Name = "display_decimals")]
public int DisplayDecimals { get; set; }
}
これは私のテストコードです:
var stream = new MemoryStream(Encoding.Unicode.GetBytes(strName))
{
Position = 0
};
var serializer = new DataContractJsonSerializer(typeof(GetAssetInfoResponse));
GetAssetInfoResponse test = (GetAssetInfoResponse)serializer.ReadObject(stream);
Console.ReadLine();
プロジェクトは、任意の外部依存関係を含めるべきではありませんので、私はNewtonsoft.Json拡張子を使用することはできません。 JSON文字列をクラスに転送する別の方法はありますか?
あなたはList<Dictionary<string, AssetInfo>>
としてResult
を宣言したが、それは{
で始まるので、フォーマットから、それは辞書の辞書ではなく、リスト(のように見えるあなたの時間
ありがとうございました!今それは動作します。 – patbec