Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 13:22

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Ebay API JSON Deserialization

Discussion on Ebay API JSON Deserialization within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Ebay API JSON Deserialization

Hi,

ich hab hier mit der Ebay API mal ein paar Produkte gesucht.

PHP Code:
string bla Connection.WebRPost("http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-NAME=FindingService&SERVICE-VERSION=1.0.0&GLOBAL-ID=EBAY-DE&SECURITY-APPNAME=dsadasdasESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=kuchenl"); 
Klappt super mit dem JSON return. Leider bekomme ich mit meinem Code keine auswertung vom JSON.

PHP Code:
{"findItemsByKeywordsResponse":[{"ack":["Success"],"version":["1.13.0"],"timestamp":["2015-04-09T19:53:02.465Z"],"searchResult":[{"@count":"100","item":[{"itemId":["231527381785"],"title":["Kuchen und so (PC, 2005, DVD-Box)"],"globalId":["EBAY-DE"],"primaryCategory":[{"categoryId":["139973"],"categoryName":["PC- & Videospiele"]}],"galleryURL":["http:\/\/thumbs2.ebaystatic.com\/m\/mOPBGu-74ZhrsIMiWP9yYcQ\/140.jpg"],"viewItemUR 
Code:


Könnte es an dem "findItemsByKeywordsResponse" liegen, dass ich den noch iwie auswerten muss oder so?
Ludder231 is offline  
Old 04/09/2015, 22:12   #2
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
das json was du gepostet hast ist ungültig, sieht aus als würde am ende was fehlen
und dann einfach einen der unzähligen json to c# converter nutzen:
tolio is offline  
Thanks
1 User
Old 04/09/2015, 22:13   #3
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Der JSON String den ich gepostet habe ist nur ein Snippet wollte keine 10000 zeilen posten. Danke aber für den Tipp mit dem Converter.
Ludder231 is offline  
Old 04/09/2015, 22:20   #4
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
dann poste mal den kompletten json string, sonst kann man sich das schlecht anschauen was nicht hinhaut. kannste ja pastebin o.ä. nutzen

ansonsten fehlen da noch die [DataContract] und [DataMember] attribute
tolio is offline  
Old 04/09/2015, 22:29   #5
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113


Sonst hier mal der JSON String für 1 Item aus der Liste

PHP Code:
"ack":["Success"],"version":["1.13.0"],"timestamp":["2015-04-09T20:39:46.878Z"],"searchResult":[{"@count":"1","item":[{"itemId":["231527381785"],"title":["Counter-Strike: Source (PC, 2005, DVD-Box)"],"globalId":["EBAY-DE"],"primaryCategory":[{"categoryId":["139973"],"categoryName":["PC- & Videospiele"]}],"galleryURL":["http:\/\/thumbs2.ebaystatic.com\/m\/mOPBGu-74ZhrsIMiWP9yYcQ\/140.jpg"],"viewItemURL":["http:\/\/www.ebay.de\/itm\/Counter-Strike-Source-PC-2005-DVD-Box-\/231527381785?pt=LH_DefaultDomain_77"],"productId":[{"@type":"ReferenceID","__value__":"66656878"}],"paymentMethod":["PayPal"],"autoPay":["false"],"postalCode":["81243"],"location":["München,Deutschland"],"country":["DE"],"shippingInfo":[{"shippingServiceCost":[{"@currencyId":"EUR","__value__":"1.6"}],"shippingType":["Flat"],"shipToLocations":["DE"]}],"sellingStatus":[{"currentPrice":[{"@currencyId":"EUR","__value__":"1.0"}],"convertedCurrentPrice":[{"@currencyId":"EUR","__value__":"1.0"}],"bidCount":["0"],"sellingState":["Active"],"timeLeft":["P0DT10H10M3S"]}],"listingInfo":[{"bestOfferEnabled":["false"],"buyItNowAvailable":["false"],"startTime":["2015-04-09T06:49:49.000Z"],"endTime":["2015-04-10T06:49:49.000Z"],"listingType":["Auction"],"gift":["false"]}],"condition":[{"conditionId":["6000"],"conditionDisplayName":["Akzeptabel"]}],"isMultiVariationListing":["false"],"topRatedListing":["false"]}]}],"paginationOutput":[{"pageNumber":["1"],"entriesPerPage":["1"],"totalPages":["311"],"totalEntries":["311"]}],"itemSearchURL":["http:\/\/www.ebay.de\/sch\/i.html?_nkw=counterstrike&_ddo=1&_ipg=1&_pgn=1"]}]} 
Wenn nur 1 Item angezeigt wird , ist auch "findItemsByKeywordsResponse" nicht mehr mit drin.
Ludder231 is offline  
Old 04/10/2015, 10:38   #6



 
Shawak's Avatar
 
elite*gold: 0
The Black Market: 259/0/0
Join Date: Apr 2010
Posts: 10,289
Received Thanks: 3,613
Dein Syntax ist falsch

Code:
class EbayCatalogDeserialization
{
  public findItemsByKeywordsResponse findItemsByKeywordsResponse { get; set; }
}

class findItemsByKeywordsResponse
{
  public string[] ack { get; set; }
  // ..
}
Shawak is offline  
Old 04/10/2015, 21:14   #7
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Quote:
Originally Posted by Shawak View Post
Dein Syntax ist falsch

Code:
class EbayCatalogDeserialization
{
  public findItemsByKeywordsResponse findItemsByKeywordsResponse { get; set; }
}

class findItemsByKeywordsResponse
{
  public string[] ack { get; set; }
  // ..
}
Funktioniert leider nicht. Fehler:
PHP Code:
{"Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'GreenKeys_Ebay_Helper_V2.findItemsByKeywordsResponse' because the type requires a JSON object (e.g. {\"name\":\"value\"}) to deserialize correctly.\r\nTo fix this error either change the JSON to a JSON object (e.g. {\"name\":\"value\"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.\r\nPath 'findItemsByKeywordsResponse', line 1, position 32."
Kann es sein das die JSON Datei bzw. String nicht ganz korrekt aufgebaut ist?
Ludder231 is offline  
Old 04/10/2015, 22:06   #8
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
das json ist syntaktisch richtig, ich frage mich nur warum das fast alles arrays sind, aber das wird nur ebay selber wissen.
ich schau wenn ich zeit hab noch mal drüber und bis dahin keiner weiter helfen konnte.

Program.cs:
Code:
static void Main(string[] args)
{
    var json = File.ReadAllText("Json.txt");
    var ms = new MemoryStream(Encoding.UTF8.GetBytes(json));

    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(JsonRoot));
    var r = (JsonRoot)ser.ReadObject(ms);
    //test
    Console.WriteLine(r.FindItemsByKeywordsResponse[0].Ack[0]);
    Console.WriteLine(r.FindItemsByKeywordsResponse[0].SearchResult[0].Count);
    Console.WriteLine(r.FindItemsByKeywordsResponse[0].SearchResult[0].Item.Count);
    Console.WriteLine(r.FindItemsByKeywordsResponse[0].SearchResult[0].Item[0].ItemId[0]);
    Console.WriteLine(r.FindItemsByKeywordsResponse[0].SearchResult[0].Item[0].Title[0]);

    Console.ReadLine();
}
Json.cs:
Code:
[DataContract]
public class Category
{
    [DataMember(Name = "categoryId")]
    public IList<string> CategoryId { get; set; }

    [DataMember(Name = "categoryName")]
    public IList<string> CategoryName { get; set; }
}

[DataContract]
public class PrimaryCategory : Category { }

[DataContract]
public class SecondaryCategory : Category { }

[DataContract]
public class CurrencyInfo
{
    [DataMember(Name = "@currencyId")]
    public string CurrencyId { get; set; }
    [DataMember(Name = "__value__")]
    public string Value { get; set; }
}

[DataContract]
public class ShippingServiceCost : CurrencyInfo { }

[DataContract]
public class CurrentPrice : CurrencyInfo { }

[DataContract]
public class ConvertedCurrentPrice : CurrencyInfo { }

[DataContract]
public class ConvertedBuyItNowPrice : CurrencyInfo { }

[DataContract]
public class BuyItNowPrice : CurrencyInfo { }

[DataContract]
public class SearchResult
{
    [DataMember(Name = "@count")]
    public string Count { get; set; }
    [DataMember(Name = "item")]
    public IList<Item> Item { get; set; }
}

[DataContract]
public class ProductId
{
    [DataMember(Name = "@type")]
    public string @Type { get; set; }
    [DataMember(Name = "__value__")]
    public string Value { get; set; }
}

[DataContract]
public class ShippingInfo
{
    [DataMember(Name = "shippingServiceCost")]
    public IList<ShippingServiceCost> ShippingServiceCost { get; set; }
    [DataMember(Name = "shippingType")]
    public IList<string> ShippingType { get; set; }
    [DataMember(Name = "shipToLocations")]
    public IList<string> ShipToLocations { get; set; }
}
[DataContract(Name = "SellingStatu")]
public class SellingStatus
{
    [DataMember(Name = "currentPrice")]
    public IList<CurrentPrice> CurrentPrice { get; set; }
    [DataMember(Name = "convertedCurrentPrice")]
    public IList<ConvertedCurrentPrice> ConvertedCurrentPrice { get; set; }
    [DataMember(Name = "bidCount")]
    public IList<string> BidCount { get; set; }
    [DataMember(Name = "sellingState")]
    public IList<string> SellingState { get; set; }
    [DataMember(Name = "timeLeft")]
    public IList<string> TimeLeft { get; set; }
}

[DataContract]
public class ListingInfo
{
    [DataMember(Name = "bestOfferEnabled")]
    public IList<string> BestOfferEnabled { get; set; }
    [DataMember(Name = "buyItNowAvailable")]
    public IList<string> BuyItNowAvailable { get; set; }
    [DataMember(Name = "startTime")]
    public IList<string> StartTime { get; set; }
    [DataMember(Name = "endTime")]
    public IList<string> EndTime { get; set; }
    [DataMember(Name = "listingType")]
    public IList<string> ListingType { get; set; }
    [DataMember(Name = "gift")]
    public IList<string> Gift { get; set; }
    [DataMember(Name = "buyItNowPrice")]
    public IList<BuyItNowPrice> BuyItNowPrice { get; set; }
    [DataMember(Name = "convertedBuyItNowPrice")]
    public IList<ConvertedBuyItNowPrice> ConvertedBuyItNowPrice { get; set; }
}

[DataContract]
public class Condition
{
    [DataMember(Name = "conditionId")]
    public IList<string> ConditionId { get; set; }
    [DataMember(Name = "conditionDisplayName")]
    public IList<string> ConditionDisplayName { get; set; }
}

[DataContract]
public class Item
{
    [DataMember(Name = "itemId")]
    public IList<string> ItemId { get; set; }
    [DataMember(Name = "title")]
    public IList<string> Title { get; set; }
    [DataMember(Name = "globalId")]
    public IList<string> GlobalId { get; set; }
    [DataMember(Name = "primaryCategory")]
    public IList<PrimaryCategory> PrimaryCategory { get; set; }
    [DataMember(Name = "galleryURL")]
    public IList<string> GalleryUrl { get; set; }
    [DataMember(Name = "viewItemURL")]
    public IList<string> ViewItemUrl { get; set; }
    [DataMember(Name = "productId")]
    public IList<ProductId> ProductId { get; set; }
    [DataMember(Name = "paymentMethod")]
    public IList<string> PaymentMethod { get; set; }
    [DataMember(Name = "autoPay")]
    public IList<string> AutoPay { get; set; }
    [DataMember(Name = "postalCode")]
    public IList<string> PostalCode { get; set; }
    [DataMember(Name = "location")]
    public IList<string> Location { get; set; }
    [DataMember(Name = "country")]
    public IList<string> Country { get; set; }
    [DataMember(Name = "shippingInfo")]
    public IList<ShippingInfo> ShippingInfo { get; set; }
    [DataMember(Name = "sellingStatus")]
    public IList<SellingStatus> SellingStatus { get; set; }
    [DataMember(Name = "listingInfo")]
    public IList<ListingInfo> ListingInfo { get; set; }
    [DataMember(Name = "condition")]
    public IList<Condition> Condition { get; set; }
    [DataMember(Name = "isMultiVariationListing")]
    public IList<string> IsMultiVariationListing { get; set; }
    [DataMember(Name = "topRatedListing")]
    public IList<string> TopRatedListing { get; set; }
    [DataMember(Name = "subtitle")]
    public IList<string> Subtitle { get; set; }
    [DataMember(Name = "secondaryCategory")]
    public IList<SecondaryCategory> SecondaryCategory { get; set; }
    [DataMember(Name = "galleryPlusPictureURL")]
    public IList<string> GalleryPlusPictureUrl { get; set; }
}

[DataContract]
public class PaginationOutput
{
    [DataMember(Name = "pageNumber")]
    public IList<string> PageNumber { get; set; }
    [DataMember(Name = "entriesPerPage")]
    public IList<string> EntriesPerPage { get; set; }
    [DataMember(Name = "totalPages")]
    public IList<string> TotalPages { get; set; }
    [DataMember(Name = "totalEntries")]
    public IList<string> TotalEntries { get; set; }
}

[DataContract]
public class FindItemsByKeywordsResponse
{
    [DataMember(Name = "ack")]
    public IList<string> Ack { get; set; }
    [DataMember(Name = "version")]
    public IList<string> Version { get; set; }
    [DataMember(Name = "timestamp")]
    public IList<string> Timestamp { get; set; }
    [DataMember(Name = "searchResult")]
    public IList<SearchResult> SearchResult { get; set; }
    [DataMember(Name = "paginationOutput")]
    public IList<PaginationOutput> PaginationOutput { get; set; }
    [DataMember(Name = "itemSearchURL")]
    public IList<string> ItemSearchUrl { get; set; }
}

[DataContract]
public class JsonRoot
{
    [DataMember(Name = "findItemsByKeywordsResponse")]
    public IList<FindItemsByKeywordsResponse> FindItemsByKeywordsResponse { get; set; }
}
mit den daten die auf pastebin waren hauts hin, output:
Code:
Success
100
100
231527381785
Counter-Strike: Source (PC, 2005, DVD-Box)
im zweifel kann man noch in einigen DataMemberAttributen IsRequired setzen um bei ungültigen daten direkt ne Exception zu bekommen, denn mit diesen ganzen arrays da drin hat man eh schon genug spaß mit null/count checks
tolio is offline  
Thanks
1 User
Old 04/15/2015, 18:34   #9
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Danke denke mal das wird funktionieren. Sorry aber ich glaube mir fehlen paar usings, da ich 115 Errors habe wegen dem "DataContract".
Ludder231 is offline  
Old 04/15/2015, 19:07   #10
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
ich helfe echt gerne, aber so ein ganz bischen an eigeninitiative ist doch echt nicht zu viel verlangt. manche leute warten wohl lieber bis zu tage auf antworten im forum als wenige sekunden selber zu googlen.
tolio is offline  
Thanks
3 Users
Old 04/15/2015, 22:03   #11



 
Shawak's Avatar
 
elite*gold: 0
The Black Market: 259/0/0
Join Date: Apr 2010
Posts: 10,289
Received Thanks: 3,613
Rechtsklick auf DataContract -> Auflösen

gg
Shawak is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Json in PHP ansprechen
01/21/2015 - Web Development - 1 Replies
Hey, spiele grade mit der Riot Api von League of Legends etwas und habe hier folgenden Json: { "playerStatSummaries": Wie genau krieg ich den angesprochen? Wäre das folgende richtig? $variable Damit geht das nicht und ich weiß grade nicht, wie genau das angesprochen wird. Bei einfacheren Jsons kriege ich das hin, hier kommt ja aber diese Nummerierung mit dazu...
JSON parsen?
10/22/2014 - Web Development - 3 Replies
Hey, habe folgenden Code: { "data": , "paging": { "cursors": { "before": "QWFJdkdyeGN6OXRhekNXVWhEaGZwZGpGODM1NUhqaktw RkV1Rk5QclhfZ1BwM1V2c1l1dmFyaGx0U3o1OXlCelBkcmhtOW t1cTJDa1dtb25HWmtHSmd6c2ZxWjlvcjh4TGFRLU1qbVpVa0cz QkE=", "after": "QWFMVDVVRnBlX0VGbE9EZzdNWlA1OXZMLTlVelRET3VF UWRWcDNGbFV6WEd3VXFneTlhMkw3c2R0b2VxY01xTE5fYmhvNW 00enFZWUxKbGlQVk81QVVsX0xCYkFIcWRyeGluSW1GdWVQbmRX WkE=" } }
.json files!
10/28/2013 - Facebook - 5 Replies
Is it Possible to Change some data in .json files I was gonna edit Dragons of atlantis .json files ! Just Like BYm gonna map it then everything is like WTF!!
JSON Rezeptdatenbank!
06/21/2012 - Web Development - 4 Replies
Hey, Ich muss fürs Studium eine "virtuelle" Küche via Canvas etc. erstellen. Die Rezepte würde ich gerne mit Json machen. Hat jmd. evtl eine art Grundgerüst für mich? Z.b. erst Rezeptname dann kommen die Zutaten (Reihenfolge beachten) Gruß
JQuery -JSON
11/28/2011 - General Coding - 0 Replies
Hey, mein Freund hat ein Problem und ich wollte mal wissen, ob ihr da helfen könnt? Die Fragestellung ist sehr kurz und ich persönlich kann damit nichts anfangen , aber hier die Frage: Wie krieg ich beim Fullcalendar in JQuery nen Datensatz per JSON rein?



All times are GMT +1. The time now is 13:23.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.