2016-09-06 83 views
0

我写的应用程序为UWP显示数据调试控制台

我有这样的代码

var p = await wc.GetProducts(new Dictionary<string, string>() { 
      { "orderby", "id" }, { "filter[search]", "1884" } 
      }); 

我尝试从字典中是这样显示的数据。

Debug.WriteLine("There"); 

     Debug.WriteLine(p.products); 

但它不起作用。

如何显示字典的数据?

+0

使用老式的foreach循环不会做你吗? – apomene

+0

我发现将复杂数据记录到调试的最简单方法是将对象简单地序列化为JSON字符串,因为它仅用于调试目的,性能不应该成为实际应用程序中的问题。我会发布一个经常用于此目的的类和示例用法。 – mbrdev

+0

非常感谢@mbrdev – Eugene

回答

0
To read a Dictionary -- 
foreach(KeyValuePair<string,string> kvp in p){ 
    Console.WriteLine(kvp.Key); 
    Console.WriteLine(kvp.Value); 
} 
foreach(string key in p.Keys){ 
    Console.WriteLine(key); 
    Console.WriteLine(p[key]);//value 
} 
foreach(string value in p.Values){ 
    Console.WriteLine(value); 
} 

但你的问题是,P是一类叫做产品:

Product p = new Product() 
     { 
      name = "test product 8", 
      title = "test product 8", 
      description = "test product 8", 
      price = 8.0M 
     }; 

你会访问p一样的性质:

p.name; 
p.title; 
p.description; 
p.price; 

Debug.WriteLine(p.name); 
Debug.WriteLine(p.title);//etc 
+0

“WooCommerceNET.WooCommerce.Product”到“System.Collections.Generic.KeyValuePair <字符串,字符串>” 有这个错误 – Eugene

+0

它不工作 – Eugene

+0

不得不看看getProducts是什么,并确保“p”是一个字典(只是将它悬停在它上面,它会让你知道它是什么类型 –

0

哪种类型的呢GetProducts()回报?

如果它只是一个Dictionary你可以做到以下几点:

foreach(var key in p.Keys) 
{ 
    Debug.WriteLine(key); 
} 
+0

public async任务 GetProducts(Dictionary parms = null) { string json = await API.SendHttpClientRequest(“products”,RequestMethod.GET,string.Empty,parms); return API.DeserializeJSon (json); } 我看到这个插件的代码 – Eugene

0

使用下面的扩展类(需要Newtonsoft JSON库),您可以得到任何对象的JSON字符串有或没有可读的格式。

使用该类获取可读的JSON字符串;

var p = await wc.GetProducts(new Dictionary<string, string>() { 
    { "orderby", "id" }, { "filter[search]", "1884" } 
    }); 

var jsonString = p.ToFormattedJsonString(); 

Debug.WriteLine(jsonString); 

使用该类获取一个没有格式的普通JSON字符串;

var p = await wc.GetProducts(new Dictionary<string, string>() { 
    { "orderby", "id" }, { "filter[search]", "1884" } 
    }); 

var jsonString = p.ToJsonString(); 

Debug.WriteLine(jsonString); 

您还可以通过添加您自己的扩展方法(如下面)来简化上述操作;

public static void ToDebug(this object data) 
{ 
    Debug.WriteLine(data.ToFormattedJsonString()); 
} 

扩展类;

using System.Text; 
using Newtonsoft.Json; 

namespace System 
{ 
    public static class JsonExtensions 
    { 
     public static string ToFormattedJsonString(this object obj, bool indentWithTab) 
     { 
      return indentWithTab 
       ? ToFormattedJsonString(obj, "\t") 
       : ToFormattedJsonString(obj); 
     } 

     public static string ToFormattedJsonString(this object obj, string indentString = " ") 
     { 
      return FormatJson(obj.ToJsonString(), indentString); 
     } 

     public static string ToJsonString(this object obj) 
     { 
      return JsonConvert.SerializeObject(obj); 
     } 

     public static T DeserializeJsonString<T>(this string jsonString) 
     { 
      return JsonConvert.DeserializeObject<T>(jsonString); 
     } 

     private static string FormatJson(string jsonString, string indentString) 
     { 
      var indent = 0; 
      var quoted = false; 
      var builder = new StringBuilder(); 
      for (var i = 0; i < jsonString.Length; i++) 
      { 
       var character = jsonString[i]; 
       switch (character) 
       { 
        case '{': 
        case '[': 
         builder.Append(character); 
         if (!quoted) 
         { 
          builder.AppendLine(); 
          builder.RepeatAppend(++indent, indentString); 
         } 
         break; 
        case '}': 
        case ']': 
         if (!quoted) 
         { 
          builder.AppendLine(); 
          builder.RepeatAppend(--indent, indentString); 
         } 
         builder.Append(character); 
         break; 
        case '"': 
         builder.Append(character); 
         bool escaped = false; 
         var index = i; 
         while (index > 0 && jsonString[--index] == '\\') 
          escaped = !escaped; 
         if (!escaped) 
          quoted = !quoted; 
         break; 
        case ',': 
         builder.Append(character); 
         if (!quoted) 
         { 
          builder.AppendLine(); 
          builder.RepeatAppend(indent, indentString); 
         } 
         break; 
        case ':': 
         builder.Append(character); 
         if (!quoted) 
          builder.Append(" "); 
         break; 
        default: 
         builder.Append(character); 
         break; 
       } 
      } 
      return builder.ToString(); 
     } 

     public static StringBuilder RepeatAppend(this StringBuilder builder, int count, string format, 
      params object[] parameters) 
     { 
      if (count <= 0 || string.IsNullOrEmpty(format)) 
       return builder; 

      for (int i = 0; i < count; i++) 
      { 
       builder.AppendFormat(format, parameters); 
      } 

      return builder; 
     } 
    } 
} 
+0

有重复追加错误 – Eugene

+0

严重\t代码\t说明\t项目\t文件\t线\t抑制状态 错误\t CS1061 \t“StringBuilder的”不包含“RepeatAppend”的定义。并且没有找到接受'StringBuilder'类型的第一个参数的扩展方法'RepeatAppend'(你是否缺少使用指令或程序集引用?)\t Milano \t C:\ Users \ nemes \ OneDrive \ Documents \ GitHub \ Milano_pizza \ Milano \ JsonExtensions.cs Active – Eugene

+0

对不起,我忘了这个扩展类使用另一个扩展类!我会更新以便为您保留所有单独的课程。 – mbrdev