2011-03-02 31 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