将List写入JObject

时间:2014-04-14 06:36:28

标签: windows-phone-8 json.net

我正在尝试创建以下格式的JObject

{history_dates: 
     [
       {start_date: "2014-03-02" status: "Added" end_date: "2014-03-02"},
       {start_date: "2014-04-02" status: "Added" end_date: "2014-04-02"},
       {start_date: "2014-05-02" status: "Deleted" end_date: "2014-05-02"}
     ]}

当它试图将d添加到JChild时,它崩溃了!

        JObject jChild = new JObject();
        for (int i = 0; i < m_iHistCount; i++)
        {
            string endDate = "";
            if (m_dtEndDate[i] != GetDefaultDate())
            {
                endDate = m_dtEndDate[i].ToString("yyyy-MM-dd");
            }
            var d = new { start_date = m_dtHistory[i].Date.ToString("yyyy-MM-dd"), status = (SYNC_STATUS)histDtSyncStatus[i], end_date = endDate };
            jChild.Add(d);
        }

这不是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

看来你尝试了错误的方法。请查看以下示例:

//declare JArray to store history_dates value
JArray historyDates = new JArray();
for (int i = 0; i < m_iHistCount; i++)
{
    string endDate = "";
    if (m_dtEndDate[i] != GetDefaultDate())
    {
        endDate = m_dtEndDate[i].ToString("yyyy-MM-dd");
    }
    var d = string.Format("{{ \"start_date\" = \"{0}\", \"status\" = \"{1}\", \"end_date\" = \"{2}\"}}",
                                  m_dtHistory[i].Date.ToString("yyyy-MM-dd"), 
                                  (SYNC_STATUS)histDtSyncStatus[i],
                                  endDate);
    historyDates.Add(d);
}

JObject root = new JObject();
//add property history_dates and assign above mentioned JArray as the property value
root.Add("history_dates", historyDates);

您还可以构造匿名对象,然后将其序列化为字符串,如下所示:

var d = new { start_date = m_dtHistory[i].Date.ToString("yyyy-MM-dd"), status = (SYNC_STATUS)histDtSyncStatus[i], end_date = endDate };
historyDates.Add(JsonConvert.SerializeObject(d));

但是首先构建Json字符串会更有效

相关问题