2016-10-04 7 views
0

私は、カップルのプロパティをシリアル化する必要があります。私は、ディスク上のファイルを持っているが、私はデシリアライズJSONをしようとすると、私はエラーが発生しているJSONを使用してシリアル化

[DataContract] 
public class ImageManipulatorViewModel : BaseViewModel 
{ 
    [DataMember] 
    public ObservableCollection<Collage> ImageList 
    { 
     get { return this.imageList; } 
     set 
     { 
      this.imageList = value; 
      base.RaisePropertyChanged("ImageList"); 
     } 
    } 
var storageFolder = ApplicationData.Current.LocalFolder; 
var sampleFile = await storageFolder.CreateFileAsync("MyProject.Collage", CreationCollisionOption.ReplaceExisting); 
string l =JsonConvert.SerializeObject(this.ImageList); 
await FileIO.WriteTextAsync(sampleFile, l); 
string tres = JsonConvert.DeserializeObject(l).ToString(); 
this.ImageList.Clear(); 
this.ImageList = JsonConvert.DeserializeObject<ObservableCollection<Collage>>(tres.ToString()); 
} 


public class Collage 
{ 
    public Thickness Position { get; set; } 
    public WriteableBitmap Image { get; set; } 
} 

:私はNewtonSoft

から私のコードをJSONシリアライザを使用します。 Could not create an instance of type Windows.Storage.Streams.IBuffer. Type is an interface or abstract class and cannot be instantiated. Path '[0].Image.PixelBuffer', line 10, position 23.

JSONファイル

[{"Position":{"Left":0.0,"Top":0.0,"Right":0.0,"Bottom":0.0},"Image":{"PixelBuffer":{},"PixelHeight":1600,"PixelWidth":2560,"Dispatcher":{"HasThreadAccess":true,"CurrentPriority":0}}},{"Position":{"Left":490.0,"Top":0.0,"Right":0.0,"Bottom":0.0},"Image":{"PixelBuffer":{},"PixelHeight":1600,"PixelWidth":2560,"Dispatcher":{"HasThreadAccess":true,"CurrentPriority":0}}}] 

何の `s私の問題?

+0

あなたは完全なJSONを投稿してくださいことはできますか?あなたのCollageクラスも? – sachin

+0

@sachin私はコードを更新し、 'Collage'を追加しました – SmiLe

+0

ImageListが既にある場合は、それをシリアル化したのと同じ文字列から再度読み込んでいますか? – AVK

答えて

0
 var savePicker = new FileSavePicker 
      { 
       SuggestedStartLocation = PickerLocationId.PicturesLibrary, 
       SuggestedFileName = string.Format("MyProject{0}", DateTime.Now.ToString("ddMMyyyyHHmm")) 
      }; 
      savePicker.FileTypeChoices.Add("Project", new List<string> {".collage"}); 
      var file = await savePicker.PickSaveFileAsync(); 
      if (file != null) 
      { 
       var ser = JsonConvert.SerializeObject(this.ImageList.ToList()); 
       await FileIO.WriteTextAsync(file, ser); 
      } 
1

JSONファイルが有効でない/完全ではありません。

[ 
    { 
     "Position": {"Left":0.0,"Top":0.0,"Right":0.0,"Bottom":0.0}, 
     "Image":{ 
      "PixelBuffer": {}, 
      "PixelHeight":1600, 
      "PixelWidth":2560, 
      "Dispatcher":{"HasThreadAccess":true,"CurrentPriority":0} 
     } 
    }, <=== here it ends without a following item or closing the array. 

ファイルを作成していますが、ファイルをフラッシュしたり閉じたりしていません。

var sampleFile = await storageFolder.CreateFileAsync("MyProject.Collage", CreationCollisionOption.ReplaceExisting); 
string l =JsonConvert.SerializeObject(this.ImageList); 
await FileIO.WriteTextAsync(sampleFile, l); // <== no FileIO.Close(sampleFile) 
+0

申し訳ありませんが、1つの部分だけをコピーして、コンマの後に続きます – SmiLe

+0

私のコードに別の問題がありますか? – SmiLe

+0

@SmiLe - あなたがコードを読み込む前に、作成したファイルを閉じるかどうかチェックしましたか? –

関連する問題