2017-01-18 23 views
0

약간의 도움이 필요합니다. Json을 사용하여 일부 게임 진행률을 저장하고 있는데 문제가 하나만있는 경우를 제외하고는 모든 것이 작동합니다. 새 값을 저장하려고하면 이전 값보다 우선하지만 기존 값을 무시하고 새 값을 추가하고 싶지 않습니다. 아무도 작은 도움을 줄 수 있습니까? 경우 ArgumentException을JSON (Unity3d)에 새 값 추가

string fromJson = File.ReadAllText(Application.dataPath + "/ships.json"); 
data = JsonMapper.ToObject(fromJson); 
data.Add(new SavedShips(shipsCount)); 
File.WriteAllText(Application.dataPath + "/ships.json", data.ToString()); 

그러나 가지고 : : 여기, LiTJson를 사용하여 코드 해요 :

SavedShips savedShips = new SavedShips(shipsCount); 
    JsonData data = JsonMapper.ToJson(savedShips); 
    File.WriteAllText(Application.dataPath + "/ships.json", data.ToString()); 

내가 이전 값을로드하고 새로운이 뭔가를 추가하는 시도 JsonData로 지정된 객체를 래핑 할 수 없습니다 . 감사합니다.

+0

'SavedShips'란 무엇이며 shipsCount와는 어떤 관계가 있습니까? – Maakep

+0

Json을 직렬화 할 때 Object를 가져 와서 Json 형식의 텍스트로 변환합니다. 객체가 1 개이고 직렬화하고 이전 파일을 덮어 쓰면 지금하는 것처럼 파일에서 하나의 객체 만 얻을 수 있습니다. 당신이하고 싶은 것은 모든 선박을 목록에 추가 한 다음 목록을 json으로 직렬화하는 것입니다. 시도해 보면 파일로 저장하기 전에 json으로 직렬화 한 적이없는 것 같습니까? – Maakep

+0

이전 값을 가져오고 새 값을 추가하여이 문제를 해결할 수있는 또 다른 방법이 있지만 지금은 WriteAllText를 AppendAllText로 바꾸면 문제가 해결되는 것 같습니다. 탄스크의 도움! – Yupi

답변

0

WriteAllText() 대신 File.AppendText()를 사용하십시오.

https://msdn.microsoft.com/en-us/library/system.io.file.appendtext(v=vs.110).aspx

이 그것을 덮어 쓰는 대신 파일의 끝에 추가해야합니다.

+0

고마워요! 테스트를 거쳐 작동합니다. – Yupi

+0

JSON을 다시 개체로 변환해야하는 경우 몇 가지 문제가있을 수 있습니다. 그렇게해야한다면 각 선박/저장에 대해 별도의 파일을 사용합니다. 또는 Fredrik이 말했듯이 대신 목록을 사용하십시오. 또는 세 번째 옵션. 각 객체를 직렬화 복원하기 전에 파일을 분할하는 메소드를 작성합니다. –