私はNewtonsoft.Jsonを使用して、私のWebサービスからの出力をオブジェクトに逆シリアル化しています。 アバターを保持するためにUser
という名前のクラスにBitmap
プロパティを追加するまでうまくいきました。Newtonsoft.Jsonデシリアライズベース64イメージが失敗します
webserviceは、そのプロパティを期待どおりのBase64文字列として返しています。私はList<User>
にWSからJSONをバック変換しようとすると問題がある 、JsonSerializationException
は、このコードブロックでスローされます。例外から
// T is IList<User>
response.Content.ReadAsStringAsync().Proceed(
(readTask) =>
{
var json = ((Task<string>)readTask).Result;
var result = JsonConvert.DeserializeObject<T>(json); //<-- it fails here
// do stuff!
});
出力は次のとおりです。
Error converting value "System.Drawing.Bitmap" to type 'System.Drawing.Bitmap'. Path '[2].Avatar
と見ています
{"Could not cast or convert from System.String to System.Drawing.Bitmap."}
これは、Base64文字列を解析できないことは明らかですが、その理由は明らかではありません。
どのようなアイデアや回避策ですか?
EDIT は、私はバイト配列を取得し、そこからビットマップをロードしないConvert.FromBase64String
を使用することができます知っています。その後、について質問するために私の質問を更新したいと思います。どのようにをスキップするか、または手動で解析することができますそのフィールド。 私は、すべてのJSONを手作業で解析することを避けたいと思います。 これも可能ですか?
EDITは2 私は、根本的な問題を見つけた:JSONが正しくWebサービスで連載されていない(と私は理由を見ることができません)。私はthisがやや異なる問題だと思ったが、それはなかった。私のWebサービスは、base64コンテンツの代わりに文字列"System.Drawing.Bitmap"
を返すだけです。したがって、JsonSerializationException
。
私はこの問題を解決できませんでした。唯一の解決策は、自分のフィールドをbyte []
にすることです。
を使用。 'JsonConvert.DeserializeObject(json)'にフィールドのみをスキップさせる方法がありますか?これはジェネリックメソッドの中にあるので、私は完全な手動解析を避けたいと思います... –
Joel
@Joel私の編集を参照してください.....正規表現やjson文字列を手動で解析する必要はありません。 – I4V
このコードでは、手動でwebserviceでオブジェクトをシリアル化する必要がありますか? – Joel