Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对象保存到字符串字典中?_C# - Fatal编程技术网

C# 如何将对象保存到字符串字典中?

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

我创建了一个类,它使用了我的php rest api的一些方法。此方法返回字符串,有时返回对象。对象表示堆栈跟踪的上下文。我将此跟踪保存在
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);