{"id":115,"date":"2010-04-02T13:34:58","date_gmt":"2010-04-02T21:34:58","guid":{"rendered":"http:\/\/www.andreanolanusse.com\/en\/?p=115"},"modified":"2012-02-07T00:10:30","modified_gmt":"2012-02-07T08:10:30","slug":"datasnap-2010-sending-and-receiving-objects","status":"publish","type":"post","link":"http:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/","title":{"rendered":"DataSnap 2010 \u2013 sending and receiving objects"},"content":{"rendered":"<p>If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to be transfered in DataSnap 2009 is limited to the dbExpress data types, but in DataSnap 2010 part of Delphi 2010 you are allowed to transfer any kind of object.<\/p>\n<p>DataSnap 2010 brings support for <strong><a href=\"http:\/\/www.json.org\/\" target=\"_blank\">JSON<\/a><\/strong> (JavaScript Object Notation), which is a lightweight data-interchange format, easy for humans to read\/write and easy for machines to parse and generate, also independent of language. In a future post I will expand on JSON advantages. To start I will explain how to transfer an object between DataSnap Win32 client and server.<\/p>\n<p>Let&#8217;s define the object we would like to transfer, class TCustomer.<\/p>\n<pre class=\"brush: delphi\">unit Customer;\r\n\r\ninterface\r\n\r\nuses\r\n   DBXJSON, DBXJSONReflect, SysUtils;\r\n\r\ntype\r\n   TMaritalStatus = (msMarried, msEngaged, msEligible);\r\n\r\nTCustomer = class\r\n    private\r\n       FName: string;\r\n       FAge: integer;\r\n       FMaritalStatus: TMaritalStatus;\r\n    public\r\n        property Name: string read FName write FName;\r\n        property Age: integer read FAge write FAge;\r\n        property MaritalStatus: TMaritalStatus read FMaritalStatus write FMaritalStatus;\r\n\r\n        function toString : string;override;\r\n  end;<\/pre>\n<p>Only objects that descend from TJSONObject are able to be transferred between client and server without any transformation in DataSnap 2010. If your object does not descend from TJSONObject, then you have to use the TJSONMarshal and TJSONUnMarshal classes to convert those objects. The example below shows how to make this conversion.<\/p>\n<pre class=\"brush: delphi\">unit Customer;\r\n\r\n  function CustomerToJSON(customer: TCustomer): TJSONValue;\r\n  var\r\n    m: TJSONMarshal;\r\n  begin\r\n    if Assigned(customer) then\r\n    begin\r\n      m := TJSONMarshal.Create(TJSONConverter.Create);\r\n      try\r\n        exit(m.Marshal(customer))\r\n      finally\r\n        m.Free;\r\n      end;\r\n    end\r\n    else\r\n      exit(TJSONNull.Create);\r\n  end;\r\n\r\n  function JSONToCustomer(json: TJSONValue): TCustomer;\r\n  var\r\n     unm: TJSONUnMarshal;\r\n  begin\r\n    if json is TJSONNull then\r\n      exit(nil);\r\n    unm := TJSONUnMarshal.Create;\r\n    try\r\n      exit(unm.Unmarshal(json) as TCustomer)\r\n    finally\r\n      unm.Free;\r\n    end;\r\n  end;<\/pre>\n<p>You don&#8217;t need to implement two transformation methods for every single class, you can implement a generic method for class that use simple data types, I mean strings, numbers, boolean. Due to the fact that some support classes can be quite complex and some types are fully supported by the current RTTI runtime converters can be added. I will not focus on converters, instead I recommend you to read this post from <a href=\"http:\/\/blogs.embarcadero.com\/adrian\/2009\/08\/19\/json-types-for-server-methods-in-datasnap-2010\/\" target=\"_blank\">Adrian Andrei<\/a> our RAD Studio Database Architect.<\/p>\n<p>At this point we have the TCustomer class ready to cross between client and server, in this case now we just need to implement a Server Method which return a TJSONValue after the TCustomer transformation, like the example below.<\/p>\n<pre class=\"brush: delphi\">\/\/ protected\r\nfunction TServerMethods.GetCustomer: TCustomer;\r\nbegin\r\n  Result := TCustomer.Create;\r\n  Result.Name := 'Pedro';\r\n  Result.Age := 30;\r\n  Result.MaritalStatus := msEligible;\r\nend;\r\n\r\n\/\/ public\r\nfunction TServerMethods.GetJSONCustomer(): TJSONValue;\r\nvar\r\n  myCustomer: TCustomer;\r\nbegin\r\n  myCustomer := GetCustomer;\r\n  Result := CustomerToJSON(myCustomer);\r\n  myCustomer.Free;\r\nend;<\/pre>\n<p>Executing the method GetJSONCustomer from the client side will be necessary to convert the method return from TJSONValue to TCustomer, using the method JSONToCustomer.<\/p>\n<pre class=\"brush: delphi\">var\r\n  proxy: TServerMethodsClient;\r\n  myJSONCustomer: TCustomer;\r\nbegin\r\n\r\n  try\r\n    proxy := TServerMethodsClient.Create(SQLConnection1.DBXConnection);\r\n    myJSONCustomer := JSONToCustomer(proxy.myJSONCustomer);\r\n\r\n    Button1.Caption := myJSONCustomer.ToString;\r\n    myJSONCustomer.Free;\r\n  finally\r\n    SQLConnection1.CloneConnection;\r\n    proxy.Free;\r\n  end;\r\nend;<\/pre>\n<p>Much more can be done, for example return an Array of objects, complex classes, etc. In future posts I will comment about that.<\/p>\n<p>The source code is available for <a href=\"http:\/\/cc.embarcadero.com\/Download.aspx?id=27361\">download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to be transfered in DataSnap 2009 is limited to the dbExpress data types, but in DataSnap 2010 part of Delphi 2010 you are allowed to transfer any kind of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":797,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_s2mail":"yes","footnotes":""},"categories":[10],"tags":[21,90,22],"class_list":["post-115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-delphi","tag-datasnap","tag-delphi","tag-json"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DataSnap 2010 \u2013 sending and receiving objects | Andreano Lanusse | Technology and Software Development<\/title>\n<meta name=\"description\" content=\"If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DataSnap 2010 \u2013 sending and receiving objects | Andreano Lanusse | Technology and Software Development\" \/>\n<meta property=\"og:description\" content=\"If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\" \/>\n<meta property=\"og:site_name\" content=\"Andreano Lanusse | Technology and Software Development\" \/>\n<meta property=\"article:published_time\" content=\"2010-04-02T21:34:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-02-07T08:10:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png\" \/>\n\t<meta property=\"og:image:width\" content=\"170\" \/>\n\t<meta property=\"og:image:height\" content=\"170\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andreano Lanusse\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andreano Lanusse\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\"},\"author\":{\"name\":\"Andreano Lanusse\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b\"},\"headline\":\"DataSnap 2010 \u2013 sending and receiving objects\",\"datePublished\":\"2010-04-02T21:34:58+00:00\",\"dateModified\":\"2012-02-07T08:10:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\"},\"wordCount\":353,\"commentCount\":7,\"publisher\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b\"},\"image\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png\",\"keywords\":[\"DataSnap\",\"Delphi\",\"JSON\"],\"articleSection\":[\"Delphi\"],\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\",\"url\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\",\"name\":\"DataSnap 2010 \u2013 sending and receiving objects | Andreano Lanusse | Technology and Software Development\",\"isPartOf\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png\",\"datePublished\":\"2010-04-02T21:34:58+00:00\",\"dateModified\":\"2012-02-07T08:10:30+00:00\",\"description\":\"If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to\",\"breadcrumb\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#breadcrumb\"},\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage\",\"url\":\"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png\",\"contentUrl\":\"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png\",\"width\":170,\"height\":170},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.andreanolanusse.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DataSnap 2010 \u2013 sending and receiving objects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#website\",\"url\":\"https:\/\/www.andreanolanusse.com\/en\/\",\"name\":\"Andreano Lanusse | Technology and Software Development\",\"description\":\"Where Andreano Lanusse talk about technology, software development, programming techniques, databases, games and more through articles, tutorials and videos\",\"publisher\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.andreanolanusse.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b\",\"name\":\"Andreano Lanusse\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/49ab23ef70c249c0cb3469f14ef07edc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/49ab23ef70c249c0cb3469f14ef07edc?s=96&d=mm&r=g\",\"caption\":\"Andreano Lanusse\"},\"logo\":{\"@id\":\"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/image\/\"},\"description\":\"Andreano Lanusse is an expert and enthusiastic on software development industry, at Embarcadero he is focused on helping to make sure the products being developed meet the expectations of Embarcadero's customers, as well as defining market strategies for Latin America. Today as Latin Lead Evangelist he spends great deal of time in developer conferences, tradeshows, user group, and visiting customers throughout Latin America. Before Embarcadero, he worked 13 years for Borland, Andreano has worked as Support Coordinator, Engineer, Product Manager, including Product Line Sales Manager, where was responsible to manage the relationship with Brazil developer community, also has worked as Principal Consultant for Borland Consulting Services on the development and management of critical applications. He previously served as Chief Architect for USS Solu\u00e7\u00f5es Gerenciadas (now USS Tempo). Andreano holds a bachelor's degree in Business Administration Marketing Emphasis from Sumare Institute, MBA in Project Management from FGV, certification in Microsoft products, all Borland ALM products, and all CodeGear product line.\",\"sameAs\":[\"http:\/\/www.andreanolanusse.com\",\"https:\/\/x.com\/andreanolanusse\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DataSnap 2010 \u2013 sending and receiving objects | Andreano Lanusse | Technology and Software Development","description":"If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/","og_locale":"en_US","og_type":"article","og_title":"DataSnap 2010 \u2013 sending and receiving objects | Andreano Lanusse | Technology and Software Development","og_description":"If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to","og_url":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/","og_site_name":"Andreano Lanusse | Technology and Software Development","article_published_time":"2010-04-02T21:34:58+00:00","article_modified_time":"2012-02-07T08:10:30+00:00","og_image":[{"width":170,"height":170,"url":"https:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png","type":"image\/png"}],"author":"Andreano Lanusse","twitter_misc":{"Written by":"Andreano Lanusse","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#article","isPartOf":{"@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/"},"author":{"name":"Andreano Lanusse","@id":"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b"},"headline":"DataSnap 2010 \u2013 sending and receiving objects","datePublished":"2010-04-02T21:34:58+00:00","dateModified":"2012-02-07T08:10:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/"},"wordCount":353,"commentCount":7,"publisher":{"@id":"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b"},"image":{"@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage"},"thumbnailUrl":"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png","keywords":["DataSnap","Delphi","JSON"],"articleSection":["Delphi"],"inLanguage":"en","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/","url":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/","name":"DataSnap 2010 \u2013 sending and receiving objects | Andreano Lanusse | Technology and Software Development","isPartOf":{"@id":"https:\/\/www.andreanolanusse.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage"},"image":{"@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage"},"thumbnailUrl":"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png","datePublished":"2010-04-02T21:34:58+00:00","dateModified":"2012-02-07T08:10:30+00:00","description":"If you start to use or migrate your application to the new DataSnap you may ask how to transfer objects between client\/server. The data types allowed to","breadcrumb":{"@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#breadcrumb"},"inLanguage":"en","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/"]}]},{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#primaryimage","url":"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png","contentUrl":"http:\/\/www.andreanolanusse.com\/en\/wp-content\/uploads\/2011\/07\/Icon_Delphi.png","width":170,"height":170},{"@type":"BreadcrumbList","@id":"https:\/\/www.andreanolanusse.com\/en\/datasnap-2010-sending-and-receiving-objects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.andreanolanusse.com\/en\/"},{"@type":"ListItem","position":2,"name":"DataSnap 2010 \u2013 sending and receiving objects"}]},{"@type":"WebSite","@id":"https:\/\/www.andreanolanusse.com\/en\/#website","url":"https:\/\/www.andreanolanusse.com\/en\/","name":"Andreano Lanusse | Technology and Software Development","description":"Where Andreano Lanusse talk about technology, software development, programming techniques, databases, games and more through articles, tutorials and videos","publisher":{"@id":"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.andreanolanusse.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en"},{"@type":["Person","Organization"],"@id":"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/b51fdf99c01fcd6ae0a5ae894c23837b","name":"Andreano Lanusse","image":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/49ab23ef70c249c0cb3469f14ef07edc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/49ab23ef70c249c0cb3469f14ef07edc?s=96&d=mm&r=g","caption":"Andreano Lanusse"},"logo":{"@id":"https:\/\/www.andreanolanusse.com\/en\/#\/schema\/person\/image\/"},"description":"Andreano Lanusse is an expert and enthusiastic on software development industry, at Embarcadero he is focused on helping to make sure the products being developed meet the expectations of Embarcadero's customers, as well as defining market strategies for Latin America. Today as Latin Lead Evangelist he spends great deal of time in developer conferences, tradeshows, user group, and visiting customers throughout Latin America. Before Embarcadero, he worked 13 years for Borland, Andreano has worked as Support Coordinator, Engineer, Product Manager, including Product Line Sales Manager, where was responsible to manage the relationship with Brazil developer community, also has worked as Principal Consultant for Borland Consulting Services on the development and management of critical applications. He previously served as Chief Architect for USS Solu\u00e7\u00f5es Gerenciadas (now USS Tempo). Andreano holds a bachelor's degree in Business Administration Marketing Emphasis from Sumare Institute, MBA in Project Management from FGV, certification in Microsoft products, all Borland ALM products, and all CodeGear product line.","sameAs":["http:\/\/www.andreanolanusse.com","https:\/\/x.com\/andreanolanusse"]}]}},"_links":{"self":[{"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/posts\/115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/comments?post=115"}],"version-history":[{"count":0,"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/posts\/115\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/media\/797"}],"wp:attachment":[{"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/media?parent=115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/categories?post=115"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/en\/wp-json\/wp\/v2\/tags?post=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}