2016-04-12 48 views
-1

我创建了一个类,使用我的PHP休息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; 
} 

你怎么能看到trace项目是一个对象,我不能把它保存在我的IDictionary。解决问题的一些方法?

+0

你为什么不跟踪序列化使用JSON并保存为这样的字符串:JsonConvert.SerializeObject(跟踪) –

+0

@Klaudiuszbryjamus我会尽力而为。 – Sandokan

+1

您是否知道,您只保存列表的最后一个元素?列表中有什么样的数据?你想存储它作为数组或作为一个字符串或别的东西? – lukbl

回答

2

可序列化对象,并将其存储为一个字符串:

transaction["context"] = Newtonsoft.Json.JsonConvert.SerializeObject(trace); 
1

而不是for循环,你可以做以下。

串联列表中的所有元素,如果你不关心他们如何序列 - ToString()将被要求列表的每个项目:

transaction["context"] = string.Join("<separator>",item.trace.context.context); 

或序列列表作为JSON数组使用this library

transaction["context"] = JsonConvert.SerializeObject(item.trace.context.context); 

再次,循环是没有必要的

相关问题