C# 如何将对象保存到字符串字典中?
我创建了一个类,它使用了我的php rest api的一些方法。此方法返回字符串,有时返回对象。对象表示堆栈跟踪的上下文。我将此跟踪保存在C# 如何将对象保存到字符串字典中?,c#,C#,我创建了一个类,它使用了我的php rest api的一些方法。此方法返回字符串,有时返回对象。对象表示堆栈跟踪的上下文。我将此跟踪保存在IDictionary中。举个小例子: IDictionary<string, string> transaction = new Dictionary<string, string>(); public class Details { public string date { get; set; } public s
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;
}
IDictionary transaction=new Dictionary();
公开课详情
{
公共字符串日期{get;set;}
公共字符串类型{get;set;}
公共字符串mex{get;set;}
}
公共类上下文
{
公共列表上下文{get;set;}
}
公共类跟踪
{
公共详细信息{get;set;}
公共上下文{get;set;}
}
公共类根对象
{
公共跟踪跟踪{get;set;}
}
//解析json
公共IDictionary getData()
{
var obj=JsonConvert.DeserializeObject(“json”);
foreach(obj中的var项目)
{
交易记录[“日期”]=item.trace.details.date;
交易记录[“类型”]=item.trace.details.type;
交易记录[“mex”]=item.trace.details.mex;
//了解一些情况
foreach(item.trace.context.context中的变量跟踪)
{
事务[“context”]=trace;//我无法执行此操作,因为这是一个对象
}
}
退货交易;
}
如何查看
跟踪
项是一个对象,我无法将其保存在我的IDictionary
中。解决此问题的一些方法?您可以序列化对象并将其存储为字符串:
transaction["context"] = Newtonsoft.Json.JsonConvert.SerializeObject(trace);
您可以执行以下操作,而不是
for
循环
连接列表的所有元素,如果您不关心它们是如何序列化的-ToString()
将在列表的每个项目上调用:
transaction["context"] = string.Join("<separator>",item.trace.context.context);
同样,循环是不必要的为什么不用json序列化跟踪并保存为如下字符串:JsonConvert.SerializeObject(trace)@Klaudiuszbryjamus我会用它试试。你知道吗,你只保存列表的最后一个元素?列表中有哪些类型的数据?您想将其存储为数组、字符串或其他形式吗?@lukbl通常情况下,上下文仅为一项。@Sandokan那么为什么它是一个列表呢?你可以选择第一个项目,而不是循环。
transaction["context"] = JsonConvert.SerializeObject(item.trace.context.context);