সি # তে JSON পার্স করুন


201

আমি গুগল এজেএক্স অনুসন্ধান API থেকে কিছু জেএসএন ডেটা পার্স করার চেষ্টা করছি। আমার এই ইউআরএল রয়েছে এবং আমি এটি ভেঙে ফেলতে চাই যাতে ফলাফল প্রদর্শিত হয়। আমি বর্তমানে এই কোডটি লিখেছি, তবে পরবর্তী কী করা উচিত সে সম্পর্কে আমি বেশ হারিয়ে গেছি, যদিও সরলিকৃত JSON স্ট্রিং সহ বেশ কয়েকটি উদাহরণ রয়েছে।

সি # এবং .NET এ সাধারণভাবে নতুন হওয়াতে আমি আমার এএসপি.নেট পৃষ্ঠার জন্য একটি খাঁটি পাঠ্য আউটপুট পাওয়ার জন্য সংগ্রাম করেছি তাই জেএসএন.এনইটকে একবার চেষ্টা করার পরামর্শ দেওয়া হয়েছে। গুগল এজেএক্স অনুসন্ধান এপিআই থেকে জেএসওএন নেবে এবং এটি স্ক্রিনে মুদ্রণ করবে এমন কোনও কোড কেবল লিখে দেওয়ার জন্য যে কেউ আমাকে সঠিক দিকে নির্দেশ করতে পারে?


সম্পাদনা: সমস্ত স্থির! সমস্ত ফলাফল ঠিক কাজ করছে। আপনাকে আবার ধন্যবাদ ড্রেইস গ্রেচ!

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ServiceModel.Web;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GoogleSearchResults g1 = new GoogleSearchResults();
        const string json = @"{""responseData"": {""results"":[{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://www.cheese.com/"",""url"":""http://www.cheese.com/"",""visibleUrl"":""www.cheese.com"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:bkg1gwNt8u4J:www.cheese.com"",""title"":""\u003cb\u003eCHEESE\u003c/b\u003e.COM - All about \u003cb\u003echeese\u003c/b\u003e!."",""titleNoFormatting"":""CHEESE.COM - All about cheese!."",""content"":""\u003cb\u003eCheese\u003c/b\u003e - everything you want to know about it. Search \u003cb\u003echeese\u003c/b\u003e by name, by types   of milk, by textures and by countries.""},{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://en.wikipedia.org/wiki/Cheese"",""url"":""http://en.wikipedia.org/wiki/Cheese"",""visibleUrl"":""en.wikipedia.org"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:n9icdgMlCXIJ:en.wikipedia.org"",""title"":""\u003cb\u003eCheese\u003c/b\u003e - Wikipedia, the free encyclopedia"",""titleNoFormatting"":""Cheese - Wikipedia, the free encyclopedia"",""content"":""\u003cb\u003eCheese\u003c/b\u003e is a food consisting of proteins and fat from milk, usually the milk of   cows, buffalo, goats, or sheep. It is produced by coagulation of the milk \u003cb\u003e...\u003c/b\u003e""},{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://www.ilovecheese.com/"",""url"":""http://www.ilovecheese.com/"",""visibleUrl"":""www.ilovecheese.com"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:GBhRR8ytMhQJ:www.ilovecheese.com"",""title"":""I Love \u003cb\u003eCheese\u003c/b\u003e!, Homepage"",""titleNoFormatting"":""I Love Cheese!, Homepage"",""content"":""The American Dairy Association\u0026#39;s official site includes recipes and information   on nutrition and storage of \u003cb\u003echeese\u003c/b\u003e.""},{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://www.gnome.org/projects/cheese/"",""url"":""http://www.gnome.org/projects/cheese/"",""visibleUrl"":""www.gnome.org"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:jvfWnVcSFeQJ:www.gnome.org"",""title"":""\u003cb\u003eCheese\u003c/b\u003e"",""titleNoFormatting"":""Cheese"",""content"":""\u003cb\u003eCheese\u003c/b\u003e uses your webcam to take photos and videos, applies fancy special effects   and lets you share the fun with others. It was written as part of Google\u0026#39;s \u003cb\u003e...\u003c/b\u003e""}],""cursor"":{""pages"":[{""start"":""0"",""label"":1},{""start"":""4"",""label"":2},{""start"":""8"",""label"":3},{""start"":""12"",""label"":4},{""start"":""16"",""label"":5},{""start"":""20"",""label"":6},{""start"":""24"",""label"":7},{""start"":""28"",""label"":8}],""estimatedResultCount"":""14400000"",""currentPageIndex"":0,""moreResultsUrl"":""http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8\u0026source\u003duds\u0026start\u003d0\u0026hl\u003den-GB\u0026q\u003dcheese""}}, ""responseDetails"": null, ""responseStatus"": 200}";
        g1 = JSONHelper.Deserialise<GoogleSearchResults>(json);
        Response.Write(g1.content);
    }
}

public class JSONHelper
{
    public static T Deserialise<T>(string json)
    {
        T obj = Activator.CreateInstance<T>();
        MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
        DataContractJsonSerializer serialiser = new DataContractJsonSerializer(obj.GetType());
        ms.Close();
        return obj;
    }
}
/// Deserialise from JSON
[Serializable]
public class GoogleSearchResults
{
    public GoogleSearchResults() { }
    public GoogleSearchResults(string _unescapedUrl, string _url, string _visibleUrl, string _cacheUrl, string _title, string _titleNoFormatting, string _content)
    {
        this.unescapedUrl = _unescapedUrl;
        this.url = _url;
        this.visibleUrl = _visibleUrl;
        this.cacheUrl = _cacheUrl;
        this.title = _title;
        this.titleNoFormatting = _titleNoFormatting;
        this.content = _content;
    }

    string _unescapedUrl;
    string _url;
    string _visibleUrl;
    string _cacheUrl;
    string _title;
    string _titleNoFormatting;
    string _content;

    [DataMember]
    public string unescapedUrl
    {
        get { return _unescapedUrl; }
        set { _unescapedUrl = value; }
    }

    [DataMember]
    public string url
    {
        get { return _url; }
        set { _url = value; }
    }

    [DataMember]
    public string visibleUrl
    {
        get { return _visibleUrl; }
        set { _visibleUrl = value; }
    }
    [DataMember]
    public string cacheUrl
    {
        get { return _cacheUrl; }
        set { _cacheUrl = value; }
    }

    [DataMember]
    public string title
    {
        get { return _title; }
        set { _title = value; }
    }

    [DataMember]
    public string titleNoFormatting
    {
        get { return _titleNoFormatting; }
        set { _titleNoFormatting = value; }
    }

    [DataMember]
    public string content
    {
        get { return _content; }
        set { _content = value; }
    }
}

কোডটি বর্তমানে সংকলন করে নিখুঁতভাবে চলে, তবে কোনও ফল দেয় না। আমার কী প্রয়োজন তা ফেরত দিতে কেউ আমাকে সহায়তা করতে পারে, ফলাফলগুলি স্ক্রিনে মুদ্রণের জন্য প্রস্তুত?

সম্পাদনা:

Json.NET উপরের উদাহরণ হিসাবে একই JSON এবং ক্লাস ব্যবহার করে কাজ করে।

GoogleSearchResults g1 = JsonConvert.DeserializeObject<GoogleSearchResults>(json);

লিঙ্ক: জেসন.এনইটি এর সাথে জেএসএনকে সিরিয়ালাইজিং এবং ডিজিজারাইজ করছে

সম্পর্কিত

সি # - নেস্টেড হ্যাশট্যাবগুলি পার্স জেএসএন অ্যারে জেএসন ফর্ম্যাট করা ডেটা
পার্স করে


আপনার GoogleSearchResultsটাইপের ক্ষেত্র এবং বৈশিষ্ট্যগুলির একই নাম রয়েছে। নেতৃস্থানীয় আন্ডারস্কোরগুলি দিয়ে আপনার ক্ষেত্রগুলির নামকরণের চেষ্টা করুন (যে কোনও কিছুই এই দুইয়ের মধ্যে বিভ্রান্ত করবে)।
অ্যান্ড্রু হ্যারে

3
আমি json.net সঙ্গে ভালো ফল ছিল james.newtonking.com/pages/json-net.aspx
কেনি

2
আমি উপরের দ্বিতীয়টি চাই। । নেট জেএসওএন সিরিয়ালাইজারে জেএসএন.এনইটের তুলনায় একেবারে ভয়ানক অভিনয় রয়েছে।
টাইলার শ্রয়েডার

উত্তর:


150

[আপডেট]
আমি ঠিক বুঝতে পেরেছি আপনি কেন ফলাফল ফিরে পাচ্ছেন না ... আপনার Deserializeপদ্ধতিতে আপনার একটি অনুপস্থিত রেখা রয়েছে । আপনি ফলাফলগুলি নির্ধারণ করতে ভুলে যাচ্ছিলেন obj:

public static T Deserialize<T>(string json)
{
    using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        return (T)serializer.ReadObject(ms);
    } 
}

এছাড়াও, কেবল রেফারেন্সের জন্য, এখানে Serializeপদ্ধতিটি:

public static string Serialize<T>(T obj)
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        serializer.WriteObject(ms, obj);
        return Encoding.Default.GetString(ms.ToArray());
    }
}

সম্পাদন করা

আপনি যদি জসন.এনইটি ব্যবহার করতে চান তবে উপরের কোডের সমতুল্য সিরিয়ালাইজ / ডিসরিয়ালাইজ পদ্ধতিগুলি হ'ল ..

Deserialize:

JsonConvert.DeserializeObject<T>(string json);

ধারাবাহিকভাবে:

JsonConvert.SerializeObject(object o);

এটি ইতিমধ্যে Json.NET এর অংশ, যাতে আপনি তাদেরকে জসনকনভার্ট ক্লাসে কল করতে পারেন।

লিঙ্ক: জেসন.এনইটি এর সাথে জেএসএনকে সিরিয়ালাইজিং এবং ডিজিজারাইজ করছে



এখন, আপনি স্ট্যাক ওভারফ্লো পাওয়ার কারণটি আপনার Properties

উদাহরণস্বরূপ এটি এক:

[DataMember]
public string unescapedUrl
{
    get { return unescapedUrl; } // <= this line is causing a Stack Overflow
    set { this.unescapedUrl = value; }
}

লক্ষ্য করুন যে getter, আপনি প্রকৃত সম্পত্তিটি ফিরিয়ে দিচ্ছেন (অর্থাত্ সম্পত্তির প্রাপক নিজেকে বারবার কল দিচ্ছেন) এবং এভাবে আপনি একটি অসীম পুনরাবৃত্তি তৈরি করছেন।


বৈশিষ্ট্যগুলি (2.0 এ) এর মতো সংজ্ঞা দেওয়া উচিত:

string _unescapedUrl; // <= private field

[DataMember]
public string unescapedUrl
{
    get { return _unescapedUrl; } 
    set { _unescapedUrl = value; }
}

আপনার একটি ব্যক্তিগত ক্ষেত্র আছে এবং তারপরে আপনি গিটারে সেই ক্ষেত্রের মানটি ফিরিয়ে দেন এবং সেটারে সেই ক্ষেত্রের মান সেট করে।


বিটিডব্লিউ, আপনি যদি 3.5 ফ্রেমওয়ার্ক ব্যবহার করছেন তবে আপনি কেবল এটি করতে পারেন এবং ব্যাকিং ফিল্ডগুলি এড়াতে পারেন এবং সংকলকটি এটির যত্ন নিতে দিন:

public string unescapedUrl { get; set;}

আমি যতদূর জানি এই মেশিনটি এখনও 3.5 তে আপডেট করা হয়নি, সুতরাং আমি 2.0 ধরে নিই। আমি ইতিমধ্যে পেতে / সেট জিনিসটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি, তবে এই অংশটি দুর্দান্ত কাজ করছে বলে মনে হচ্ছে।
মাইক বি

... হুম, তবে আমি যদি ভুল না হয়ে থাকি তবে DataContractJsonSerializerএটি কেবল ৩.৫ ফ্রেমে পাওয়া যায়, না?
আন্দ্রেয়াস গ্রেচ 14

এটি অদ্ভুত, কারণ ভিজ্যুয়াল স্টুডিওতে আমার কোডে ডেটা কন্ট্রাক্ট জসনসিরাইজার সনাক্ত করতে কোনও সমস্যা আছে বলে মনে হয় না, তবুও এটি ব্যবহার (পছন্দ; সেট;) পছন্দ করে না।
মাইক বি

যে কোনও উপায়ে, আমি এই নতুন মেশিনটি 3.5 তে আপগ্রেড করেছি, যাতে কোনও সমস্যা না হয়।
মাইক বি

আমি কোডের এই অতিরিক্ত লাইনটি যুক্ত করেছি এবং আমি যদি g1.responseData.results লেখার চেষ্টা করি তবে আমার স্ক্রিনে "ফলাফল []" মুদ্রিত হয়ে যায়, অন্য সমস্ত কিছু তাদের নাম হিসাবে মুদ্রণ করে (যেমন: g1.sponseseData "রেসপন্স ডেটা" এবং জি 1 "গুগলসার অনুসন্ধান ফলাফল" মুদ্রণ করা হচ্ছে)।
মাইক বি

15

আপনার ডেটা ক্লাস JSON অবজেক্টের সাথে মেলে না। পরিবর্তে এটি ব্যবহার করুন:

[DataContract]
public class GoogleSearchResults
{
    [DataMember]
    public ResponseData responseData { get; set; }
}

[DataContract]
public class ResponseData
{
    [DataMember]
    public IEnumerable<Results> results { get; set; }
}

[DataContract]
public class Results
{
    [DataMember]
    public string unescapedUrl { get; set; }

    [DataMember]
    public string url { get; set; }

    [DataMember]
    public string visibleUrl { get; set; }

    [DataMember]
    public string cacheUrl { get; set; }

    [DataMember]
    public string title { get; set; }

    [DataMember]
    public string titleNoFormatting { get; set; }

    [DataMember]
    public string content { get; set; }
}

এছাড়াও, শ্রেণিবিন্যাসের জন্য ধরণের ধরণ পেতে আপনাকে ক্লাসটি ইনস্ট্যান্ট করতে হবে না:

public static T Deserialise<T>(string json)
{
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
    {
        var serialiser = new DataContractJsonSerializer(typeof(T));
        return (T)serialiser.ReadObject(ms);
    }
}

আমি এটি চেষ্টা করেছি, তবে আমার ত্রুটিটি পেয়েছে মাত্র "টাইপ বা নেমস্পেসের নাম 'আইইনিউমারেবল' সন্ধান করা যায়নি (আপনি কী কোনও নির্দেশিকা বা কোনও সংসদীয় রেফারেন্স ব্যবহার করে অনুপস্থিত?" ")
মাইক বি

কিছু নয়, আমি সিস্টেম.কলেশন.জেনেরিকের পরিবর্তে সিস্টেম.কলেশন ব্যবহার করছিলাম। এটি এখন সেই কোডটির সাথে নিখুঁতভাবে সংকলন করে, তবে ডেটা আউটপুট দেওয়ার জন্য আমার কী করা দরকার?
মাইক বি 15

আমার আপডেট হওয়া পোস্টটি পরীক্ষা করুন কারণ আমি খুঁজে পেয়েছি যে আপনার
কোডটিতে

15

আমি এই পদ্ধতির সন্ধান পেয়েছি যা জেএসনকে একটি গতিশীল অবজেক্টে পার্স করে , এটি একটিকে প্রসারিত করে DynamicObjectএবং JavascriptConverterস্ট্রিংটিকে একটি অবজেক্টে রূপান্তরিত করে।

DynamicJsonObject

public class DynamicJsonObject : DynamicObject
{
    private IDictionary<string, object> Dictionary { get; set; }

    public DynamicJsonObject(IDictionary<string, object> dictionary)
    {
        this.Dictionary = dictionary;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        result = this.Dictionary[binder.Name];

        if (result is IDictionary<string, object>)
        {
            result = new DynamicJsonObject(result as IDictionary<string, object>);
        }
        else if (result is ArrayList && (result as ArrayList) is IDictionary<string, object>)
        {
            result = new List<DynamicJsonObject>((result as ArrayList).ToArray().Select(x => new DynamicJsonObject(x as IDictionary<string, object>)));
        }
        else if (result is ArrayList)
        {
            result = new List<object>((result as ArrayList).ToArray());
        }

        return this.Dictionary.ContainsKey(binder.Name);
    }
}

পরিবর্তক

public class DynamicJsonConverter : JavaScriptConverter
{
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        if (dictionary == null)
            throw new ArgumentNullException("dictionary");

        if (type == typeof(object))
        {
            return new DynamicJsonObject(dictionary);
        }

        return null;
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override IEnumerable<Type> SupportedTypes
    {
        get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(object) })); }
    }
}

ব্যবহার ( নমুনা জেসন ):

JavaScriptSerializer jss = new JavaScriptSerializer();
jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() });

dynamic glossaryEntry = jss.Deserialize(json, typeof(object)) as dynamic;

Console.WriteLine("glossaryEntry.glossary.title: " + glossaryEntry.glossary.title);
Console.WriteLine("glossaryEntry.glossary.GlossDiv.title: " + glossaryEntry.glossary.GlossDiv.title);
Console.WriteLine("glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.ID: " + glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.ID);
Console.WriteLine("glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.para: " + glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.para);
foreach (var also in glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso)
{
    Console.WriteLine("glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso: " + also);
}

এই পদ্ধতিটিকে সত্যে ফিরে আসতে হবে, অন্যথায় এটি ত্রুটি ছুঁড়ে দেবে। যেমন একটি কী উপস্থিত না থাকলে আপনি একটি ত্রুটি ফেলতে পারেন।

ফিরে আসা trueএবং খালি করা resultত্রুটি নিক্ষেপের পরিবর্তে একটি খালি মান ফিরে আসবে।

public override bool TryGetMember(GetMemberBinder binder, out object result)
{

    if (!this.Dictionary.ContainsKey(binder.Name))
    {
        result = "";
    }
    else
    {
        result = this.Dictionary[binder.Name];
    }

    if (result is IDictionary<string, object>)
    {
        result = new DynamicJsonObject(result as IDictionary<string, object>);
    }
    else if (result is ArrayList && (result as ArrayList) is IDictionary<string, object>)
    {
        result = new List<DynamicJsonObject>((result as ArrayList).ToArray().Select(x => new DynamicJsonObject(x as IDictionary<string, object>)));
    }
    else if (result is ArrayList)
    {
        result = new List<object>((result as ArrayList).ToArray());
    }

    return true; // this.Dictionary.ContainsKey(binder.Name);
}

8

আমি কেবল পুরো উদাহরণটি কার্যকর হবে বলে মনে করি। এটি এই সমস্যার উদাহরণ।

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ServiceModel.Web;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GoogleSearchResults g1 = new GoogleSearchResults();
        const string json = @"{""responseData"": {""results"":[{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://www.cheese.com/"",""url"":""http://www.cheese.com/"",""visibleUrl"":""www.cheese.com"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:bkg1gwNt8u4J:www.cheese.com"",""title"":""\u003cb\u003eCHEESE\u003c/b\u003e.COM - All about \u003cb\u003echeese\u003c/b\u003e!."",""titleNoFormatting"":""CHEESE.COM - All about cheese!."",""content"":""\u003cb\u003eCheese\u003c/b\u003e - everything you want to know about it. Search \u003cb\u003echeese\u003c/b\u003e by name, by types   of milk, by textures and by countries.""},{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://en.wikipedia.org/wiki/Cheese"",""url"":""http://en.wikipedia.org/wiki/Cheese"",""visibleUrl"":""en.wikipedia.org"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:n9icdgMlCXIJ:en.wikipedia.org"",""title"":""\u003cb\u003eCheese\u003c/b\u003e - Wikipedia, the free encyclopedia"",""titleNoFormatting"":""Cheese - Wikipedia, the free encyclopedia"",""content"":""\u003cb\u003eCheese\u003c/b\u003e is a food consisting of proteins and fat from milk, usually the milk of   cows, buffalo, goats, or sheep. It is produced by coagulation of the milk \u003cb\u003e...\u003c/b\u003e""},{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://www.ilovecheese.com/"",""url"":""http://www.ilovecheese.com/"",""visibleUrl"":""www.ilovecheese.com"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:GBhRR8ytMhQJ:www.ilovecheese.com"",""title"":""I Love \u003cb\u003eCheese\u003c/b\u003e!, Homepage"",""titleNoFormatting"":""I Love Cheese!, Homepage"",""content"":""The American Dairy Association\u0026#39;s official site includes recipes and information   on nutrition and storage of \u003cb\u003echeese\u003c/b\u003e.""},{""GsearchResultClass"":""GwebSearch"",""unescapedUrl"":""http://www.gnome.org/projects/cheese/"",""url"":""http://www.gnome.org/projects/cheese/"",""visibleUrl"":""www.gnome.org"",""cacheUrl"":""http://www.google.com/search?q\u003dcache:jvfWnVcSFeQJ:www.gnome.org"",""title"":""\u003cb\u003eCheese\u003c/b\u003e"",""titleNoFormatting"":""Cheese"",""content"":""\u003cb\u003eCheese\u003c/b\u003e uses your webcam to take photos and videos, applies fancy special effects   and lets you share the fun with others. It was written as part of Google\u0026#39;s \u003cb\u003e...\u003c/b\u003e""}],""cursor"":{""pages"":[{""start"":""0"",""label"":1},{""start"":""4"",""label"":2},{""start"":""8"",""label"":3},{""start"":""12"",""label"":4},{""start"":""16"",""label"":5},{""start"":""20"",""label"":6},{""start"":""24"",""label"":7},{""start"":""28"",""label"":8}],""estimatedResultCount"":""14400000"",""currentPageIndex"":0,""moreResultsUrl"":""http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8\u0026source\u003duds\u0026start\u003d0\u0026hl\u003den-GB\u0026q\u003dcheese""}}, ""responseDetails"": null, ""responseStatus"": 200}";
        g1 = JSONHelper.Deserialise<GoogleSearchResults>(json);

        foreach (Pages x in g1.responseData.cursor.pages)
        {
            // Anything you want to get
            Response.Write(x.label);

        }
    }
}

public class JSONHelper
{
    public static T Deserialise<T>(string json)
    {
        using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
        {
            var serialiser = new DataContractJsonSerializer(typeof(T));
            return (T)serialiser.ReadObject(ms);
        }
    }

    public static string Serialize<T>(T obj)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
        using (MemoryStream ms = new MemoryStream())
        {
            serializer.WriteObject(ms, obj);
            return Encoding.Default.GetString(ms.ToArray());
        }
    }
}

[DataContract]
public class GoogleSearchResults
{
    [DataMember]
    public ResponseData responseData { get; set; }

    [DataMember]
    public string responseStatus { get; set; }

}


public class ResponseData
{
    [DataMember]
    public Cursor cursor { get; set; }

    [DataMember]
    public IEnumerable<Results> results { get; set; }


}


[DataContract]
public class Cursor
{
    [DataMember]
    public IEnumerable<Pages> pages { get; set; }
}



[DataContract]
public class Pages
{
    [DataMember]
    public string start { get; set; }

    [DataMember]
    public string label { get; set; }

}


[DataContract]
public class Results
{
    [DataMember]
    public string unescapedUrl { get; set; }

    [DataMember]
    public string url { get; set; }

    [DataMember]
    public string visibleUrl { get; set; }

    [DataMember]
    public string cacheUrl { get; set; }

    [DataMember]
    public string title { get; set; }

    [DataMember]
    public string titleNoFormatting { get; set; }

    [DataMember]
    public string content { get; set; }
}

6

আমি উপরের কোডটি ব্যবহার করার চেষ্টা করেছি কিন্তু কার্যকর হয়নি। গুগল দ্বারা ফিরিয়ে দেওয়া জেএসএন কাঠামোটি অন্যরকম এবং সহায়ক DataContractJsonSerializer.ReadObject()কর্মে একটি খুব গুরুত্বপূর্ণ মিস রয়েছে: সেই কলটি আসলে জেএসএন ডেটাটিকে অবজেক্টের মধ্যে ডিসেসরাইজ করে।

এই কোডটি যা ২০১১ সালে কাজ করে:

using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;
using System.Collections.Generic;

namespace <YOUR_NAMESPACE>
{
    public class JSONHelper
    {
        public static T Deserialise<T>(string json)
        {
            T obj = Activator.CreateInstance<T>();
            MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
            DataContractJsonSerializer serialiser = new DataContractJsonSerializer(obj.GetType());
            obj = (T)serialiser.ReadObject(ms);
            ms.Close();
            return obj;
        }
    }

    public class Result
    {
        public string GsearchResultClass { get; set; }
        public string unescapedUrl { get; set; }
        public string url { get; set; }
        public string visibleUrl { get; set; }
        public string cacheUrl { get; set; }
        public string title { get; set; }
        public string titleNoFormatting { get; set; }
        public string content { get; set; }
    }

    public class Page
    {
        public string start { get; set; }
        public int label { get; set; }
    }

    public class Cursor
    {
        public string resultCount { get; set; }
        public Page[] pages { get; set; }
        public string estimatedResultCount { get; set; }
        public int currentPageIndex { get; set; }
        public string moreResultsUrl { get; set; }
        public string searchResultTime { get; set; }
    }

    public class ResponseData
    {
        public Result[] results { get; set; }
        public Cursor cursor { get; set; }
    }

    public class GoogleSearchResults
    {
        public ResponseData responseData { get; set; }
        public object responseDetails { get; set; }
        public int responseStatus { get; set; }
    }
}

প্রথম ফলাফলের বিষয়বস্তু পেতে, করুন:

GoogleSearchResults googleResults = new GoogleSearchResults();
googleResults = JSONHelper.Deserialise<GoogleSearchResults>(jsonData);
string contentOfFirstResult = googleResults.responseData.results[0].content;

4

আপনার সহায়তার জন্য সবাইকে ধন্যবাদ। এটি আমার চূড়ান্ত সংস্করণ, এবং এটি আপনার সম্মিলিত সহায়তার জন্য ধন্যবাদ কাজ করে! আমি কেবল আমার পরিবর্তনগুলি দেখিয়ে চলেছি, বাকি সমস্তগুলি জো চুংয়ের কাজ থেকে নেওয়া হয়েছে

public class GoogleSearchResults
    {
        [DataMember]
        public ResponseData responseData { get; set; }

        [DataMember]
        public string responseDetails { get; set; }

        [DataMember]
        public int responseStatus { get; set; }
    }

এবং

 [DataContract]
    public class ResponseData
    {
        [DataMember]
        public List<Results> results { get; set; }
    }

3

গুগল ম্যাপ এপিআই অনুরোধ এবং সি # দিয়ে দিকনির্দেশগুলি পার্স করুন, আপনার ইউআরএলের জসনকে এক্সএমএলে পরিবর্তন করুন এবং ফলাফলকে ব্যবহারযোগ্য সি # জেনেরিক তালিকার অবজেক্টে পরিণত করতে নিম্নলিখিত কোডটি ব্যবহার করুন।

আমাকে তৈরি করতে কিছুক্ষণ সময় নিল তবে এটি এখানে

var url = String.Format("http://maps.googleapis.com/maps/api/directions/xml?...");
var result = new System.Net.WebClient().DownloadString(url);
var doc = XDocument.Load(new StringReader(result));

var DirectionsResponse = doc.Elements("DirectionsResponse").Select(l => new
{
    Status = l.Elements("status").Select(q => q.Value).FirstOrDefault(),
    Route = l.Descendants("route").Select(n => new
    {
        Summary = n.Elements("summary").Select(q => q.Value).FirstOrDefault(),
        Leg = n.Elements("leg").ToList().Select(o => new
        {
            Step = o.Elements("step").Select(p => new
            {
                Travel_Mode = p.Elements("travel_mode").Select(q => q.Value).FirstOrDefault(),
                Start_Location = p.Elements("start_location").Select(q => new
                {
                    Lat = q.Elements("lat").Select(r => r.Value).FirstOrDefault(),
                    Lng = q.Elements("lng").Select(r => r.Value).FirstOrDefault()
                }).FirstOrDefault(),
                End_Location = p.Elements("end_location").Select(q => new
                {
                    Lat = q.Elements("lat").Select(r => r.Value).FirstOrDefault(),
                    Lng = q.Elements("lng").Select(r => r.Value).FirstOrDefault()
                }).FirstOrDefault(),
                Polyline = p.Elements("polyline").Select(q => new
                {
                    Points = q.Elements("points").Select(r => r.Value).FirstOrDefault()
                }).FirstOrDefault(),
                Duration = p.Elements("duration").Select(q => new
                {
                    Value = q.Elements("value").Select(r => r.Value).FirstOrDefault(),
                    Text = q.Elements("text").Select(r => r.Value).FirstOrDefault(),
                }).FirstOrDefault(),
                Html_Instructions = p.Elements("html_instructions").Select(q => q.Value).FirstOrDefault(),
                Distance = p.Elements("distance").Select(q => new
                {
                    Value = q.Elements("value").Select(r => r.Value).FirstOrDefault(),
                    Text = q.Elements("text").Select(r => r.Value).FirstOrDefault(),
                }).FirstOrDefault()
            }).ToList(),
            Duration = o.Elements("duration").Select(p => new
            {
                Value = p.Elements("value").Select(q => q.Value).FirstOrDefault(),
                Text = p.Elements("text").Select(q => q.Value).FirstOrDefault()
            }).FirstOrDefault(),
            Distance = o.Elements("distance").Select(p => new
            {
                Value = p.Elements("value").Select(q => q.Value).FirstOrDefault(),
                Text = p.Elements("text").Select(q => q.Value).FirstOrDefault()
            }).FirstOrDefault(),
            Start_Location = o.Elements("start_location").Select(p => new
            {
                Lat = p.Elements("lat").Select(q => q.Value).FirstOrDefault(),
                Lng = p.Elements("lng").Select(q => q.Value).FirstOrDefault()
            }).FirstOrDefault(),
            End_Location = o.Elements("end_location").Select(p => new
            {
                Lat = p.Elements("lat").Select(q => q.Value).FirstOrDefault(),
                Lng = p.Elements("lng").Select(q => q.Value).FirstOrDefault()
            }).FirstOrDefault(),
            Start_Address = o.Elements("start_address").Select(q => q.Value).FirstOrDefault(),
            End_Address = o.Elements("end_address").Select(q => q.Value).FirstOrDefault()
        }).ToList(),
        Copyrights = n.Elements("copyrights").Select(q => q.Value).FirstOrDefault(),
        Overview_polyline = n.Elements("overview_polyline").Select(q => new
        {
            Points = q.Elements("points").Select(r => r.Value).FirstOrDefault()
        }).FirstOrDefault(),
        Waypoint_Index = n.Elements("waypoint_index").Select(o => o.Value).ToList(),
        Bounds = n.Elements("bounds").Select(q => new
        {
            SouthWest = q.Elements("southwest").Select(r => new
            {
                Lat = r.Elements("lat").Select(s => s.Value).FirstOrDefault(),
                Lng = r.Elements("lng").Select(s => s.Value).FirstOrDefault()
            }).FirstOrDefault(),
            NorthEast = q.Elements("northeast").Select(r => new
            {
                Lat = r.Elements("lat").Select(s => s.Value).FirstOrDefault(),
                Lng = r.Elements("lng").Select(s => s.Value).FirstOrDefault()
            }).FirstOrDefault(),
        }).FirstOrDefault()
    }).FirstOrDefault()
}).FirstOrDefault();

আমি আশা করি এটি কারও সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.