2015-12-26 72 views
1

嘿所有我有以下的JSON輸出,我寫了像我需要它由JSON.net輸出:JSON.net格式輸出,就像我需要

{"DATA": { 
    "firstName": "Bill", 
    "lastName": "Gates", 
    "emailAddress": "[email protected]", 
    "phoneNum": "5552349856", 
    "image": "https://upload.wikimedia.org/wikipedia/commons/1/19/Bill_Gates_June_2015.jpg", 
    "title": "CEO", 
    "clocked": [ 
     {"date": "12-13-2015 17:00:00", "type": "OUT"}, 
     {"date": "12-13-2015 13:00:00", "type": "IN"}, 
     {"date": "12-12-2015 14:30:00", "type": "OUT"}, 
     {"date": "12-12-2015 10:00:00", "type": "IN"}, 
     {"date": "12-11-2015 17:00:00", "type": "OUT"}, 
     {"date": "12-11-2015 13:00:00", "type": "IN"}, 
     {"date": "12-10-2015 10:30:00", "type": "OUT"}, 
     {"date": "12-10-2015 08:00:00", "type": "IN"}, 
     {"date": "12-09-2015 13:45:00", "type": "OUT"}, 
     {"date": "12-09-2015 09:00:00", "type": "IN"}, 
     {"date": "12-08-2015 12:30:00", "type": "OUT"}, 
     {"date": "12-08-2015 10:00:00", "type": "IN"}, 
     {"date": "12-07-2015 13:45:00", "type": "OUT"}, 
     {"date": "12-07-2015 08:30:00", "type": "IN"}, 
     {"date": "12-06-2015 12:10:00", "type": "OUT"}, 
     {"date": "12-06-2015 09:40:00", "type": "IN"}, 
     {"date": "12-05-2015 18:00:00", "type": "OUT"}, 
     {"date": "12-05-2015 14:10:00", "type": "IN"}, 
     {"date": "12-04-2015 12:30:00", "type": "OUT"}, 
     {"date": "12-04-2015 08:00:00", "type": "IN"} 
    ] 
} 
} 

使用C#JSON類在線發生器我得到以下類:

public class Clocked 
{ 
    public string date { get; set; } 
    public string type { get; set; } 
} 

public class DATA 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string emailAddress { get; set; } 
    public string phoneNum { get; set; } 
    public string image { get; set; } 
    public string title { get; set; } 
    public List<Clocked> clocked { get; set; } 
} 

public class RootObject 
{ 
    public DATA DATA { get; set; } 
} 

我得到所需的數據,通過SQL服務器查詢這些JSON字符串來填寫:

try 
{ 
    string connetionString = @"Data Source=(localdb)\v11.0;Initial Catalog=stantecUsers;Integrated Security=True"; 
    string sql = "SELECT * " + 
        "FROM [stantecUsers].[dbo].[users] AS stantecUsers " + 
        "INNER JOIN [stantecUsers].[dbo].[usersData] AS stantecUserData " + 
        "ON stantecUsers.link2Data = stantecUserData.link2Data" + 
        "WHERE stantecUsers.phoneNum = '" + phoneNum + "'" + 
        "ORDER BY [stantecUsers].ID ASC;"; 
    SqlConnection connection; 
    SqlCommand command; 
    connection = new SqlConnection(connetionString); 

    try 
    { 
     connection.Open(); 
     command = new SqlCommand(sql, connection); 
     SqlDataReader read = command.ExecuteReader(); 

     while (read.Read()) 
     { 
      Debug.WriteLine(read["firstName"].ToString()); 
     } 

     read.Close(); 
     command.Dispose(); 
     connection.Close(); 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine("Can not open connection ! " + ex.Message); 
    } 
    } 
    catch (SqlException e) 
    { 
     return e.Message; 
    } 
} 

那麼我怎麼會讓JSON.net輸出看起來像我的模擬呢?

回答

4

您需要創建一個匹配您想要獲取的JSON結構的對象,然後才能序列化該對象以獲取最終的JSON。代碼可能看起來類似於:

string finalJSON = ""; 

try 
{ 
    connection.Open(); 
    command = new SqlCommand(sql, connection); 
    SqlDataReader read = command.ExecuteReader(); 

    // Create a new object that matches the structure of the JSON file. 
    var root = new RootObject 
    { 
     DATA = new DATA { clocked = new List<Clocked>() } 
    }; 

    while (read.Read()) 
    { 
     root.DATA.firstName = read["firstName"].ToString(); 
     root.DATA.lastName = read["lastName"].ToString(); 
     // Continue with the other attributes... 
     root.DATA.clocked.Add(new Clocked {date = read["date"].ToString(), type = read["type"].ToString() }); 
    } 

    // Serialize the object using JSON.Net. 
    finalJSON = JsonConvert.SerializeObject(root); 

    read.Close(); 
    command.Dispose(); 
    connection.Close(); 
} 
+0

很好的例子。謝謝! – StealthRT