2016-06-27 3 views
0

Server 클래스에서 JSON 파일을 만드는 데 문제가 있습니다.올바른 형식의 C# 클래스에서 JSON 파일을 만드는 방법

public class CsServerInfo 
{ 
    public string ip { get; set; } 
    public string name { get; set; } 
} 

아이디어가 Button Click에 JSON 파일에 새 서버를 추가하는 것입니다 : 이것은 내 클래스입니다. 즉, 버튼을 클릭 할 때마다 (은 이고 Name 속성은 WPF 창에 있음) JSON 파일에 새 서버를 추가해야합니다.

CsServerInfo newServ = new CsServerInfo(); 
newServ.ip = this.serverIP.Text; 
newServ.name = this.serverName.Text; 

string json = JsonConvert.SerializeObject(newServ); 
     System.IO.File.AppendAllText(@"C:\JSON4.json", json); 

이 문제는 내가 제대로 포맷되지 않았습니다 JSON 파일을 얻을 수있다 :

{"ip":"52.45.24.2","name":"new"}{"ip":"45.45.45.4","name":"new2"} 

서버 사이에 쉼표가 없습니다를 내가 ToArray()를 사용하는 경우 내가 얻을 :

[{"ip":"52.45.24.2","name":"new"}][{"ip":"45.45.45.4","name":"new2"}] 

올바른 형식을 [{server properties}, {another server}]이어야하지만 나는 그것을 얻을 수 없습니다. 귀하의 도움에 감사드립니다

+0

개체를 만들고 serilaize 할 때마다 serialize 호출의 json 결과를 파일에 추가하고 있습니까? 나는 그렇게 생각하고 그게 네 문제 야. –

답변

3

한 번에 한 서버의 JSON 텍스트를 파일에 추가하고 있습니다. 기존 목록을 구문 분석하고 서버를 추가 한 다음 전체 목록을 직렬화해야합니다.

// TODO first check if there's an existing file or not 
var servers = 
    JsonConvert.DeserializeObject<List<CsServerInfo>>(File.ReadAllText(@"C:\JSON4.json")); 
servers.Add(newServ); 
File.WriteAllText(@"C:\JSON4.json", JsonConvert.SerializeObject(servers)); 
1

[{server properties}, {another server}] 이것은 개체 목록입니다. 당신이 나열 새로운 추가하고 다시 저장 파일에서 모든 읽어야 파일에 추가해야 할 경우 당신은 목록을

List<CsServerInfo> listServ = new List<CsServerInfo>; 
... 
string json = JsonConvert.SerializeObject(listServ); 

을 serializie한다.

0

JSON을 파일에 추가하지 마십시오. Json.NET이 JSON에 직렬화 작업을 처리하도록합니다. List<CsServerInfo>을 조작하고 수정이 완료되면 전체 목록을 직렬화해야합니다. 그런 식으로 직렬화 및 저장하면 Json.NET이 JSON을 생성합니다. JSON은 올바르게 형식화되며 올바르게 형식이 지정됩니다.

관련 문제