|
You last visited: Today at 13:22
Advertisement
Ebay API JSON Deserialization
Discussion on Ebay API JSON Deserialization within the .NET Languages forum part of the Coders Den category.
04/09/2015, 22:08
|
#1
|
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:
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=asdasdasdas8223f84&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&keywords=kuchen");
catalog = JsonConvert.DeserializeObject<EbayCatalogDeserialization>(bla);
MessageBox.Show(catalog.ack); MessageBox.Show(catalog.version); MessageBox.Show(catalog.timestamp);
Außerdem hab ich noch die Klasse für Deserialization getter & setter
PHP Code:
class EbayCatalogDeserialization {
public string ack { get; set; }
public string version { get; set; }
//public string findItemsByKeywordsResponse { get; set; }
public string timestamp { get; set; }
}
Könnte es an dem "findItemsByKeywordsResponse" liegen, dass ich den noch iwie auswerten muss oder so?
|
|
|
04/09/2015, 22:12
|
#2
|
elite*gold: 2932
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:
|
|
|
04/09/2015, 22:13
|
#3
|
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.
|
|
|
04/09/2015, 22:20
|
#4
|
elite*gold: 2932
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
|
|
|
04/09/2015, 22:29
|
#5
|
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.
|
|
|
04/10/2015, 10:38
|
#6
|
elite*gold: 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; }
// ..
}
|
|
|
04/10/2015, 21:14
|
#7
|
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
|
Quote:
Originally Posted by Shawak
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?
|
|
|
04/10/2015, 22:06
|
#8
|
elite*gold: 2932
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
|
|
|
04/15/2015, 18:34
|
#9
|
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".
|
|
|
04/15/2015, 19:07
|
#10
|
elite*gold: 2932
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.
|
|
|
04/15/2015, 22:03
|
#11
|
elite*gold: 0
Join Date: Apr 2010
Posts: 10,289
Received Thanks: 3,613
|
Rechtsklick auf DataContract -> Auflösen
gg
|
|
|
 |
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.
|
|