【问题标题】:How to print values from JSON Type Object to console in C#如何在 C# 中将 JSON 类型对象中的值打印到控制台
【发布时间】:2011-03-02 10:57:53
【问题描述】:

我正在尝试使用 c# 2.0 编写一个控制台应用程序,它将使用我的 web 服务并从 web 方法返回结果。

在我的 C# 代码中,我可以从 web 方法中获取我的值,请参见下面的示例代码:

 // 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

【问题讨论】:

    标签: c# json


    【解决方案1】:

    您可以使用以下内容:

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

    简单干净。

    【讨论】:

    • 要实际将缩进的 JSON 打印到控制台,请参阅 Jon Skeet 的回答。
    • @DavidAlanCondit 错了!我只是用它来打印到控制台缩进的 Json。
    【解决方案2】:

    我个人会使用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,您可以将其转换为相关类型。

    【讨论】:

    • @MKS:你试过了吗?据我所知,JSON.NET 适用于 .NET 2。
    【解决方案3】:

    如果您返回的 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

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多