2016-09-06 154 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