如何将对象保存为字符串字典?

时间:2016-04-12 08:31:01

标签: c#

我创建了一个使用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中。解决问题的一些方法?

2 个答案:

答案 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);

同样,循环不是必需的