2016-10-04 4 views
0

몇 가지 속성을 직렬화해야합니다. 나는 JSON으로 직렬화

NewtonSoft

에서 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; } 
} 

내가 디스크에 파일을 가지고,하지만 난 직렬화 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}}}] 

What`s 내 문제?

+0

는 전체 JSON을 게시하시기 바랍니다 수 있습니까? 콜라주 수업도? – sachin

+0

@sachin 코드를 업데이트하고 콜라주를 추가했습니다 – 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

죄송합니다, 쉼표가 끝나면 한 부분 만 복사했습니다. – SmiLe

+0

내 코드에 다른 문제가 있습니까? – SmiLe

+0

@SmiLe - 읽었을 때 코드가 작성된 파일을 닫는 지 확인 했습니까? –

관련 문제