我创建了一个使用php rest api的方法的类。此方法返回字符串,有时返回一个对象。该对象呈现堆栈跟踪的上下文。我将此跟踪保存在System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
SmtpClient SmtpServer = new SmtpClient("servername");
mail.From = new MailAddress(strFromAddress);
mail.To.Add(strToAddress);
mail.Subject = strSubject;
mail.Body = strMessage;
SmtpServer.Send(mail);
内。一个小例子:
IDictionary
如何看待IDictionary<string, string> transaction = new Dictionary<string, string>();
public class Details
{
public string date { get; set; }
public string type { get; set; }
public string mex { get; set; }
}
public class Context
{
public List<object> context { get; set; }
}
public class Trace
{
public Details details { get; set; }
public Context context { get; set; }
}
public class RootObject
{
public Trace trace { get; set; }
}
//Parse the json
public IDictionary<string, string> getData()
{
var obj = JsonConvert.DeserializeObject<List<RootObject>>("the json");
foreach (var item in obj)
{
transaction["date"] = item.trace.details.date;
transaction["type"] = item.trace.details.type;
transaction["mex"] = item.trace.details.mex;
// Get some context
foreach (var trace in item.trace.context.context)
{
transaction["context"] = trace; //I can't do this is an object
}
}
return transaction;
}
项目是一个对象,我无法将其保存在我的trace
中。解决问题的一些方法?
答案 0 :(得分:2)
您可以序列化对象并将其存储为字符串:
transaction["context"] = Newtonsoft.Json.JsonConvert.SerializeObject(trace);
答案 1 :(得分:1)
您可以执行以下操作,而不是for
循环。
连接列表的所有元素,如果您不关心它们的序列化方式,则会在列表的每个项目上调用ToString()
:
transaction["context"] = string.Join("<separator>",item.trace.context.context);
或使用this library将列表序列化为json数组:
transaction["context"] = JsonConvert.SerializeObject(item.trace.context.context);
同样,循环不是必需的