2011-03-02 30 views
3

我想寫使用C#2.0,這將消耗我的web服務,並從返回的WebMethod結果的控制檯應用程序。從JSON對象類型如何打印值到控制檯在C#

在我的C#代碼,我能夠從將WebMethod讓我的價值觀,請參見下面的示例代碼:

// print results 
      try 
      { 

       Type objtype = Type.GetType(crisresult.ToString()); 
       object obj = Activator.CreateInstance(objtype); 

       Object[] mArgs = new Object[methodArgs.Length + 1]; 
       methodArgs.CopyTo(mArgs, 0); 
       mArgs.SetValue(obj, methodArgs.Length); 
       methodArgs = mArgs; 

       Object result = mi.Invoke(service, methodArgs);   
       Console.WriteLine(result);    

      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Error invoking method '" + methodName + "'"); 
       Console.WriteLine(e); 
      } 
      Console.WriteLine("Press enter to continue..."); 
      Console.ReadLine(); 

現在,在上面的代碼從我的webmethod我的結果是JSON類型完全恢復,所以我的Object result有例如JSON類型的值:

{"FullName":"Mr Mahesh Sharma","Miles":0,"TierStatus":"IO","TierMiles":0,"MilesExpiry":0,"ExpiryDate":"30/03/2012 00:00:00","AccessToken":"106C9FD143AFA6198A9EBDC8B9CC0FB2CE867356222D21D45B16BEEB9A7F390B5E226665851D6DB9","ActiveCardNo":"00300452124","PersonID":8654110} 

上述結果,我想在控制檯打印下面格式:

FullName: Mr Mahesh Sharma 
Miles: 0 
TierStatus: IO 
TierMiles:0 
MilesExpiry:0 
ExpiryDate:31 March 2012 
AccessToken: 106C9FD143AFA6198A9EBDC8B9CC0FB2CE867356222D21D45B16BEEB9A7F390B5E226665851D6DB9 
ActiveCardNo: 00300452124 
PersonID: 8654110 

回答

12

個人而言,我會用JSON.NET。示例代碼:

using System; 
using Newtonsoft.Json.Linq; 

class Test 
{ 
    static void Main() 
    { 
     string json = "{\"FullName\":\"Mr Mahesh Sharma\",\"Miles\":0,\"TierStatus\":\"IO\"," + 
      "\"TierMiles\":0,\"MilesExpiry\":0,\"ExpiryDate\":\"30/03/2012 00:00:00\"," + 
      "\"AccessToken\":\"106C9FD143AFA6198A9EBDC8B9CC0FB2CE867356222D21D45B16BEE" + 
      "B9A7F390B5E226665851D6DB9\",\"ActiveCardNo\":\"00300452124\",\"PersonID\":8654110}"; 

     JObject parsed = JObject.Parse(json); 

     foreach (var pair in parsed) 
     { 
      Console.WriteLine("{0}: {1}", pair.Key, pair.Value); 
     } 
    } 
} 

輸出:

FullName: "Mr Mahesh Sharma" 
Miles: 0 
TierStatus: "IO" 
TierMiles: 0 
MilesExpiry: 0 
ExpiryDate: "30/03/2012 00:00:00" 
AccessToken: "106C9FD143AFA6198A9EBDC8B9CC0FB2CE867356222D21D45B16BEEB9A7F390B5E226665851D6DB9" 
ActiveCardNo: "00300452124" 
PersonID: 8654110 

注意,每對中的值是JToken,您可以轉換爲相應的類型。

+0

@MKS:你有沒有嘗試過嗎? JSON.NET工作對.NET 2,據我所知。 – 2011-03-02 11:23:04

1

如果返回的JSON總是在格式,那麼你也可以嘗試使用JavaScriptSerializer

嘗試下面的代碼:

class Result 
{ 
    public string FullName{get; set;} 
    public int Miles {get;set;} 
    public string TimerStatus {get;set;} 
    public int TimerMiles {get;set;} 
    public int MilesExpiry {get;set;} 
    public DateTime ExpiryDate{get;set;} 
    public string AccessToken {get;set;} 
    public string ActiveCardNo {get;set;} 
    public long PersonID {get;set;} 
} 

然後反序列化字符串C#對象。

JavaScriptSerializer jsr = new JavaScriptSerializer(); 
Result res = jsr.Deserialize<Result>(/*your json string*/); 

Console.Writeline("FullName:{0}\n"+" 
       "Miles{1}\n" + 
       "TimerStatus:{2}\n"+ 
       "TimerMiles:{3}\n"+ 
       "MilesExpiry:{4}\n"+ 
       "ExpiryDate:{5}"+ 
       "AccessToken:{6}"+ 
       "ActiveCardNo:{7}"+ 
       "PersonID:{8}", 
       res.FullName, res.Miles,res.TimerStatus,res.TimerMiles,res.MilesExpiry,res.Expirydate,res.AccessToken,res.ActivecardNo,res.PersonID 
       ) 

輸出爲你想要的東西:

FullName: Mr Mahesh Sharma 
Miles: 0 
TierStatus: IO 
TierMiles:0 
MilesExpiry:0 
ExpiryDate:31 March 2012 
AccessToken: 106C9FD143AFA6198A9EBDC8B9CC0FB2CE867356222D21D45B16BEEB9A7F390B5E226665851D6DB9 
ActiveCardNo: 00300452124 
PersonID: 8654110 

More Info on how to use JavaScriptSerializer

9

您可以使用以下方法:

return Newtonsoft.Json.JsonConvert.SerializeObject(obj, Formatting.Indented); 

簡單幹淨。

+0

最好的答案在這裏... – 2015-07-03 05:49:33