ノックアウトを学び、写真アップローダを作成しようとしています。私は正常にいくつかの画像を配列に格納しました。今私はポストバックしたい。私のノックアウトコード(Javascriptを)では、私はこれを行う:イメージ - > JSON - >。ネットイメージ
私はJavaScriptで画像「クラス」を持っている:
// The image object that wukk be posted back.
function Image(_Image, _Description, _Filesize, _Filetype) {
var self = this;
self.Image =_Image;
self.Description = _Description;
self.Filesize = _Filesize;
self.Filetype = _Filetype;
self.DisplaySize = ko.computed(function() {
SizeToText(self.Filesize);
});
}
私は「画像」と呼ばれるプロパティにこれらの配列を持っています。
[保存]ボタンをクリックすると、イメージの配列を 'オブジェクト'に単純にストライプ化しようとします。
var object = JSON.stringify({
images: self.images(),
});
次に、オブジェクトを自分の.net WebAPIコントローラに戻します。
var uri = "/api/Photo/Upload";
$.post({ url: uri, contentType: "application/json" }, object)
.done(function (data) {
self.images.removeAll();
});
私のメソッドが呼び出されます、と私はそれが受け取るデータで見ることができ、全ての画像データなど
記述方法は次のように定義されています
public int Upload(UIImageUploadList data)
とUIImageUploadList画像のリストを保持するクラスです。
public class UIImageUploadList
{
public List<UIImageUpload> Images { get; set; }
}
とUIImageUploadは次のとおりです。
public class UIImageUpload
{
public string Image { get; set; }
public string Description { get; set; }
public string FileType { get; set; }
public int FileSize { get; set; }
}
したがって、私は自分のサービス/ロジック/データレイヤーに渡すことができるように、 'データ'フィールドからデータを解析します。
foreach(var p in data.Images)
{
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
var routes_list =
json_serializer.DeserializeObject(p.Image);
byte[] bytes = Convert.FromBase64String(p.Image);
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
photos.Add(new Photo
{
Description = p.Description,
PhotoData = image
});
}
しかし、それはBase64にあります。 (JSON.Stringifyは私が信じていた)。
画像プロパティは、こので始まる:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJY
で終わる:
AElFTkSuQmCC"
私はそれが.NETで
などJPGまたはBMPだ場合、私がしようと知っていますこれをImageタイプに変更して、私のDBに渡してください。
しかし、「データがプリミティブなJSONタイプではない」という「DeserializeObject」に失敗します。
最終的にデータベースに保存されるイメージにどのように変換する必要がありますか?