Как напечатать значения из JSON Type Object на консоль в C # - PullRequest
6 голосов
/ 02 марта 2011

Я пытаюсь написать консольное приложение, используя c # 2.0, которое будет использовать мой веб-сервис и возвращать результаты из веб-метода.

В моем коде на C # я могу получить свои значения из веб-метода, см.Пример кода ниже:

 // 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 Type, поэтому мои 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

Ответы [ 3 ]

18 голосов
/ 27 ноября 2014

Вы можете использовать следующее:

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

Просто и чисто.

17 голосов
/ 02 марта 2011

Лично я бы использовал 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, которое можно привести к соответствующему типу.

1 голос
/ 02 марта 2011

Если ваш возвращенный 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 #object.

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

Дополнительная информация о том, как использовать JavaScriptSerializer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...