tag:blogger.com,1999:blog-18813584274665343652024-02-02T11:13:14.494-08:00Delphi Tips,Delphi News,Delphi NotesShare Delphi Learning Tips,Notes And Provide Latest Delphi Newshidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.comBlogger187125tag:blogger.com,1999:blog-1881358427466534365.post-29188433231530172962010-03-05T21:04:00.000-08:002010-03-05T21:05:17.249-08:00Delphi Prism ASP.NET web chat serviceUsing Delphi 2010, we can build ASP.NET web services and projects, as I often demonstrate in my ASP.NET workshops and training events (in The Netherlands, UK and Sweden for example). In this article, I'll demonstrate how we can use Delphi Prism and ASP.NET to write a web chat service, consuming it in an ASP.NET web form as well. <br />In order to participate with the demo of this month, you need a copy of Delphi Prism. After starting Delphi Prism, do File | New ?Project, and in the Web node of the Delphi Prism project types, select the ASP.NET Web Application. Specify WebChat as name of the application. This will create a new solution with one project called WebChat<br /><br />Unfortunately, inside the generated source code in file chat.asmx.pas the [WebMethod] attribute still appears above the implementation of the example method chat.HelloWorld instead of the definition of this method in the chat class. We need to move that attribute from the implementation to the definition. In fact, we don't need the entire HelloWorld method at all, so feel free to remove both the definition and implementation. <br />For the chatroom example, I need two methods: one to send a chat message, and another to retrieve all chat messages.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-17807384268589381752010-03-05T21:01:00.001-08:002010-03-05T21:03:18.153-08:00Delphi 2010 Delayed Dynamic Link LibrariesTraditionally, Dynamic Link Libraries (DLLs) can be loaded in two different ways: implicit or explicit.<br /><br /><b>unit</b> DelayedHandler;<br /><b>interface<br />uses</b><br />SysUtils;<br /><br /><b>type</b><br />ELoadLibrary = <b>class</b>(Exception);<br />EGetProcAddress = <b>class</b>(Exception);<br /><br /><b>implementation<br /><br />function</b> DelayedHandlerHook(dliNotify: dliNotification;<br />pdli: PDelayLoadInfo): <b>Pointer</b>; <b>stdcall</b>;<br /><b>begin<br />if</b> dliNotify = dliFailLoadLibrary <b>then</b><br /><b>raise</b> ELoadLibrary.Create('Could not load ' + pdli.szDll)<br /><b>else<br />if</b> dliNotify = dliFailGetProcAddress <b>then<br />if</b> pdli.dlp.fImportByName <b>then<br />raise</b> EGetProcAddress.Create('Could not load ' +<br />pdli.dlp.szProcName + ' from ' + pdli.szDll)<br /><b>else<br />raise</b> EGetProcAddress.Create('Could not load index ' +<br />IntToStr(pdli.dlp.dwOrdinal) + ' from ' + pdli.szDll)<br /><b>end</b>;<br /><br /><b>initialization</b><br />SetDliFailureHook(DelayedHandlerHook);<br /><b>finalization</b><br />SetDliFailureHook(<b>nil</b>);<br /><b>end</b>.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-24174237870365390082010-03-05T20:57:00.000-08:002010-03-05T20:59:44.135-08:00C++Builder Developer’s Journal – Call for Papers out for May 2010 issueThe C++Builder Developer’s Journal is a great magazine run by some really dedicated guys. I’ve been a subscriber for quite awhile and find it almost always has a couple of articles I’m interested in. They are very often applicable to Delphi as well. Anyway, the May 2010 issue will be an open one, meaning it will be freely available to anyone, not just subscribers. They are running a Call for Papers right now, so if you’ve had an idea for an article burning away in the back of your mind, or just like the idea of the fame and fortune that comes with being a published author (yes, I kept a straight face while typing that. Getting good at this, aren’t I?) go and check it out.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-39489455853057579732010-03-05T20:56:00.001-08:002010-03-05T20:56:38.859-08:00Delphi Prism 2010 Does Not Seem To Use SubdirectoriesWhen working on an ASP.NET website, I find it a lot easier if you put related sections in seperate subdirectories. For example:<br /><br />CSS and Javascript can be put in a directory with caching in order to speed up the page loads<br /><br />Pages that are only available to certain roles (i.e. “Admin”) can be put in a seperate directory and then you set the web.config so that only that role can access the directory. This helps to make it really clear who the page is ment for.<br /><br />While attempting to port a site from Delphi RAD 2007 to Delphi Prism 2010, I was amazed that it would not let me do this. I even opened a site in Visual Web Developer 2008 (the Microsoft compeditor that Prism basically uses as the IDE) to check if it was a Microsoft issue. Not only did the Microsoft Web Developer 2008 allow it, but when I went to create a code file, it suggested putting it into app_code and offered to move it there for me (but did not force me to if I didn’t want to).<br /><br />In comparison, in Delphi Prism 2010, I opened {project}\css\proj.css. Instead of allowing me to use the file where it was, Prism created a brand new file {project}\proj.css and added that to the project. To add to the confusion, it left the old file {project}\css\proj.css. Now I have two copies of proj.css. I tried it with several different files and kept having this issue.<br /><br />Not only is this annoying, I find that this really makes a larger site a lot harder to maintain.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-16075497659538647252009-09-08T19:13:00.001-07:002009-09-08T19:13:55.549-07:00SamplingProfiler v1.7.4<strong>SamplingProfiler</strong> v1.7.4 is now available. This version adds an option for Delphi 2010 paths, and fixes a big with the silent mode execution that would render it inoperative. There also have been other minor changes, mostly cosmetic.<br /><br />This release also includes preparation for an “attach to process” option, which is currently not enabled, but should hopefully make in the next version (available “when ready”).<br /><br />Delphi 2010 paths added to options.<br />Fixed a bug in silent mode.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-40386437022794406022009-09-08T19:11:00.000-07:002009-09-08T19:13:04.201-07:00What To Do When You Find a Bug in Your Program<strong>No Go Answers</strong><br />If possible pretend that you are the company's answering machine. "You have reached Acme LTD, we are sorry but all the support lines are busy. Please call back in 12 hours".<br />Answer that you are sorry but the line is lousy and you did not hear the last sentence. Blib, zzp, blip. "Could you please call us back tomorrow, or when the lines are fixed?".<br />Answer that you are sorry but the support team is on holidays and that they will be back in no time, in 3 months.<br />Answer "I do not care, leave me alone, its Friday. You asked for the application now learn to live with it".<br /><strong>No Go Doings</strong><br />After you have reproduced the steps and actually found the bug:<br />Introduce new, more severe bugs. The bug from the phone call will look like child's play. When this new bug is found, introduce another one. Just keep adding more bugs.<br />Ignore the bug. Just continue adding extra functionality to the application. Maybe users will forget and never again run into it.<br />Restart your development environment. If that does not help restart Windows. If that does not help restart Windows again.<br />Locate the line of the source code that is responsible for the bug (note: this requires lots of your valuable time). Then do one of the following (or all):<br />Delete the function containing the line of code that produces the bug. If you remove the cause - the consequence (bug) will go away. If, for example, the result of the function was a Boolean value, just make sure that sometimes false is returned and sometimes true is returned for the function result.<br />Turn your head away from the monitor. Pretend that you are dead. Maybe it will go away.<br />Turn your head away from the monitor. Pretend that you are dead. Try to scare the bug by quickly looking into the source code saying "bu". Repeat until the bug is gone or the code fixes itself.<br />Delete the application source. Delete any marks the application ever existed. Pretend that you never created the program in the first place.<br />Run. Run as fast as you can.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-13805570597588157082009-09-06T20:08:00.000-07:002009-09-06T20:10:38.349-07:00Search your HTML documentation with HelpNDoc 2.2<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2voq3YqTbeh7rEw9uwFOQTIE7wj7tPc1Nh6rmeQQi1va6d7rxA-Nj-K8rak7qV-DD0fdz60259ZwXRLGgh4wCYI_qxmQHqWVVHwYOK_q8HTDXZfJPNVOk5rMNM1Jx8HKv5akfGa4e70U/s1600-h/html-search-feature.png"><img id="BLOGGER_PHOTO_ID_5378557592341661186" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 254px; CURSOR: hand; HEIGHT: 197px" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2voq3YqTbeh7rEw9uwFOQTIE7wj7tPc1Nh6rmeQQi1va6d7rxA-Nj-K8rak7qV-DD0fdz60259ZwXRLGgh4wCYI_qxmQHqWVVHwYOK_q8HTDXZfJPNVOk5rMNM1Jx8HKv5akfGa4e70U/s400/html-search-feature.png" border="0" /></a><br /><div>HelpNDoc 2.2 introduces a custom made JavaScript search engine to power the client-side searching functionality of the HTML generated documentation. This means that, without any complicated server-side technology, users will be able to search your HTML documentation with ease and speed.<br />PDF Generation is now more robust and the external files functionality has been totally rewritten to better handle HTML and Word documentation import. It is now easier than ever to include external files in topics. </div>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-83078309090160644562009-09-06T20:07:00.000-07:002009-09-06T20:08:04.466-07:00Delphi 2010 migration was a beeze; samples/slides will be uploaded soonThis week, I found some time do migrate all the sample projects to the release versions of Delphi Win32 2010 and Delphi Prism 2010.<br /><br />Delphi Win32 2010 works like a charm: it is much faster and has a much smaller footprint than any other Galileo based IDE.<br />In fact, it feels almost as fast as the pre-Galileo based IDE’s.<br />With the added benefit that all the new features make me much more productive, not the least because it has not yet crashed on me this week once.<br />Crashing has been a frequent thing on me since Delphi 4 (maybe I should not even mention that number ), for most IDE’s at least a couple of times a week, so this is good.<br /><br />Delphi Prism 2010 works really nice too, it is rock solid, and the language as some great features not found in other .NET languages.<br />But it still needs a tiny bit more polishing on the Visual Studio IDE Integration part.<br />There are a few things not as smoothly integrated as I’m used to in C# and VB .NET (for instance when adding assembly references; C# and VB.NET allow you to do that from multiple places in the IDE; Delphi Prism from only one).<br />I know it is nitpicking (the same holds for the Team Foundation System integration in the Visual Studio IDE: ever tried to add files or folders? There is only one icon that allows you to do it. Ever tried to move files or folders around? No way you can drag & drop, in fact you can move only 1 file or folder at a time, and then the folder tree leaves you at the target).<br /><br />The Embarcadero folks have worked hard on developer productivity in the Delphi Win32 2010 IDE.<br />(Did I mention the F6 key? It is an awesome way of directly jumping into configuration dialogs a zillion levels deep.<br />Did I mention the Ctrl-D key? It instantly reformats your source code to your formatting settings).<br />So maybe it is now time to put some of that effort into the Prism side as well.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-28595004707014238262009-09-06T20:04:00.001-07:002009-09-06T20:04:59.910-07:00PDFtoolkit VCL v3.3Gnostice PDFtoolkit is a comprehensive and versatile PDF component suite for Delphi™ and C++Builder®. PDFtoolkit VCL components come with hundreds of functions and properties that put immense power in the hands of the developer. PDFtoolkit hides the complexity of the PDF format and allows developers to easily create applications that can edit, enhance, secure, merge, split, view, digitally sign, and print PDF documents and process PDF forms. PDFtoolkit can extract text, export to images, and also add digital signatures.<br /><br />PDFtoolkit does not require PDF software such as Adobe PDF library, Adobe Acrobat Professional, Adobe PDF Reader or GhostScript.<br /><br />Note: PDFtoolkit works on existing documents. For creating new PDF documents in Delphi or C++Builder, you can use eDocEngine VCL. For other platforms, we have PDFOne .NET and PDFOne Java, which can create PDF documents from scratch as well as modify existing PDF documents.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-2866023311859505152009-09-06T20:01:00.000-07:002009-09-06T20:03:31.669-07:00Memory Manager Tool FastMM 4.94FastMM is a lightning fast replacement memory manager for Borland Delphi Win32 applications that scales well in multi-threaded applications, is not prone to memory fragmentation, and supports shared memory without the use of external .DLL files.<br /><br /><a href="http://sourceforge.net/projects/fastmm/" target="blank">download</a>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-815399562537117402009-09-06T19:59:00.000-07:002009-09-06T20:01:29.599-07:00TurboPower Orpheus 4.06 for Delphi 2010Orpheus is an award-winning UI toolkit for Borland Delphi &C++Builder. It contains over 120 components covering everything fromdata entry to calendars and clocks. Other noteworthy componentsinclude an Object Inspector, LookOut bar, & report views.<br /><br /><a href="http://sourceforge.net/projects/tporpheus/" target="blank">download</a>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-75924148934264450532009-09-06T19:58:00.000-07:002009-09-06T19:59:48.978-07:00IDE Fix Pack 2010 – ObjectInspector F1 keyI got many requests to add a patch for the non-functioning F1 key in the Object Inspector. So I spend 2 hours trying to find out where the F1 got lost and what Delphi 2009 does what 2010 doesn’t. My research showed that Delphi 2009 calls a function named “ShowPropertyHelp” while Delphi 2010 skips this call. Before the call to ShowPropertyHelp there is a call to a function named “GetTrait”.In Delphi 2009 it returns an interface while in Delphi 2010 it returns nil.<br /><br />Then I remembered that I saw something in ToolsAPI.pas that was called “Traits”. So I looked into it and found the IOTAPersonalityServices interface. By analyzing the GetTrait “call parameters” I was able to extract the GUID that is used for the IOTAPersonalityServices.GetTrait(ATraitGUID) parameter. It seems that in Delphi 2010 the Property-Help trait is missing or GetTrait doesn’t return it.<br /><br />The next step was to try to add the “trait” by calling the IOTAPersonalityServices.AddPersonalityTrait method with the personality ID and the extracted GUID. And vólà the F1 key in the Object Inspector is back.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-73706998023100201072009-09-03T18:43:00.001-07:002009-09-03T18:43:46.484-07:00Class (, Static, or Shared) Constructors (and Destructors)<strong>Improved encapsulation</strong><br />How many times have you needed to initialize something related to a specific class? What if your class is using the singleton pattern and you need to create that single instance? How about registering the class with a “class-factory?” Prior to Delphi 2010, there were several options available to you, none of which were really in keeping with the OOP notion of encapsulation. You could put all the code into the initialization section of the unit in which the class lived, add a regular class method and call it explicitly, or manually integrate the init code into your application’s startup. By moving all this code into a class constructor, the mere act of “touching” the class will cause the class constructor to run in keeping with the above rules.<br /><br /><strong>Better control over smart-linking</strong><br />Loosely coupled with improved encapsulation is the notion that by moving any initialization code into the class constructor you have a little more control over what code is linked into your application. You can now take advantage of the fact that as long as the class type isn’t referenced referenced anywhere in your code, none of the code related to the class type is linked in, including the VMT, virtual methods, RTTI, etc.. If you had placed this init code into the initialization section of its containing unit, then at least the VMT, virtual methods and RTTI would have been linked into your application. Even though none of your code references it. The new enhanced RTTI throws an interesting wrinkle to this theory, but that will have to be covered later.<br /><br /><strong>Better language compatibility with Delphi Prism</strong><br />As Delphi Prism gains popularity, more people will need to maintain some of their code in a manner that they can compile with either compiler. There are still many language constructors that both compilers have that the other doesn’t, but this is a continuing effort to close that gap where it makes sense. Expect to see more work in this area, in both compilers.<br /><br />In my next post, we’ll “pop the hood” (or bonnet, for our good friends across the pond) and take a peek at how they work and exactly when they are invoked. I will say that many people tend to read way, way too much into this simple statement describing when a class constructor is invoked; “Called automatically to initialize the class before the first instance is created or any static members are referenced.” The only temporal reference in that statement is “…before…”. I will leave you to consider the implications of that word, lest many of you begin to talk about “threading issues” and “code-bloat.” Class constructors and destructors are to classes as initialization and finalization are to units.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-26091527094310418472009-09-03T18:39:00.000-07:002009-09-03T18:40:10.477-07:00SmartInspect now supports Delphi 2010We have just released a new version of our .NET, Java and Delphi logging tool SmartInspect that supports the new Delphi 2010. Embarcadero’s latest Delphi version looks like a very solid release and we have seen other people report that there are good chances that Delphi 2010 will become the new reference version for many years to come.<br /><br />As usual, existing SmartInspect customers can download the new release from our customer portal. If you are interested in giving SmartInspect a try, please download the updated trial version with Delphi 2010 support from our website.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-80600018412334293692009-09-02T18:25:00.000-07:002009-09-02T18:26:33.342-07:00Delphi 2010’s RTTI and Active ScriptingI’ve been playing around with the new RTTI stuff in the D2010 trial, and I have to say, I’m impressed. But for what it surfaces for method pointers (= event types) and sets, it seems both very complete and very intuitive to use. Not only have I managed to use it without having reference to either source code or an API reference (though let’s not encourage Embarcadero on the latter, eh?), but it has been generally very solid — do something wrong, and an appropriate exception is cleanly raised with a message that tells you straighaway what the issue is. The one (er) exception to this is TValue not doing quite enough verification when attempting a cast to a Variant, though as the latter is an explicit operation, it’s easy enough to work around if and when it bites.<br /><br />That said, reading the small amount of documentation, I happened across mention of an Invoke method, which set me thinking — is it finally possible to cleanly (and generically!) wrap Delphi objects into IDispatch ones for use in Active Scripting? Well, apart from the events issue and the difficulties of surfacing set types in a script-friendly manner, my answer is: for sure! Check out this compiled EXE if you’re interested (screenshot here).<br /><br />Basically, what I’ve done is to write a TCustomDispProxy class with TObjectDispProxy and TClassDispProxy descendants; in the demo, these are then used to directly surface the Application, Mouse and Screen objects, together with the form instance (object properties and fields are handled automatically) and some metaclasses (TButton, TLabel, etc.).The idea is that no specific object or class type requires a specific wrapper — all just use TObjectDispProxy and TClassDispProxy respectively, with wrappers for sub-objects created on the fly. Now unlike Allen Bauer, I’m not a masochist in these things, and so have used the MS Script Control rather than implemented the Active Scripting interfaces directly; because of this, be warned that if the control isn’t installed (which is unlikely these days, though could be the case), the EXE won’t run.<br /><br />Anyhow, if anyone’s interested in the actual code, add a comment saying so and I’ll endeavour to do it up for public consumption. Alternatively, if you’re not interested, then don’t leave a comment and I won’t botherhidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-87409602461544736382009-09-02T18:17:00.000-07:002009-09-02T18:23:52.128-07:00Custom Marshalling/UnMarshalling in Delphi 2010<p><strong>Introduction</strong><br />Some days ago, Embarcadero has presented the new version of RAD Studio, 2010.<br />The are many new features, but you can find in a lot places around the web, so<br />I won’t repeat them here.</p><br /><p>One of the things widely requested from all Delphi programmers all over the world over the past few years, including myself, is<br />certainly a new and more powerful RTTI.</p><br /><p>The new system of RTTI has finally arrived, and pave the way for a large number of applications.<br />One area that has benefited from the new RTTI is for sure the marshaled objects.</p><br /><p>Marshaling is defined as follows:</p><br /><p><em>“In computer science, marshalling (similar to serialization) is the process of<br />transforming the memory representation of an object to a data format suitable for<br />storage or transmission. It is typically used when data must be moved between<br />different parts of a computer program or from one program to another.<br />The opposite, or reverse, of marshalling is called unmarshalling (demarshalling) (similar to deserialization).”<br />–WikiPedia<br /></em></p><br /><p>In Delphi 2010 the process of serialization and deserialization is handled respectively by a Marshaller and an Unmarshaller.</p><br /><p>The built-in format for the serialization of any Delphi object is JSON.<br />There are 2 main classes responsible for serializing objects into JSON, both present in the unit DBXJSONReflect:<br />- TJSONMarshal<br />- TJSONUnMarshal</p><br /><p>Let’s say you have an object defined as follow:</p><br /><br /><div class="wp-synhighlighter-collapsed"><a name="#codesyntax1"></a>Code</div><br /><div class="wp-synhighlighter-inner" style="DISPLAY: none"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >type</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TKid <span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >class</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> FirstName<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> LastName<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Age<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >Integer</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div></li></ol></pre></div><br /><br /><p>To serialize and deserialize an instance of TKid it requires the following steps:</p><br /><br /><div class="wp-synhighlighter-expanded"><a name="#codesyntax2"></a>Code</div><br /><div class="wp-synhighlighter-inner"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Mar<span style="color:#000066;">:</span> TJSONMarshal<span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//Serializer</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMar<span style="color:#000066;">:</span> TJSONUnMarshal<span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//UnSerializer</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid<span style="color:#000066;">:</span> TKid<span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//The Object to serialize</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> SerializedKid<span style="color:#000066;">:</span> TJSONObject<span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//Serialized for of object</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Mar <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TJSONMarshal<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">(</span>TJSONConverter<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TKid<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid<span style="color:#000066;">.</span><span style="color:#006600;">FirstName</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#ff0000;">'Daniele'</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid<span style="color:#000066;">.</span><span style="color:#006600;">LastName</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#ff0000;">'Teti'</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid<span style="color:#000066;">.</span><span style="color:#006600;">Age</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#0000ff;">29</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> SerializedKid <span style="color:#000066;">:</span><span style="color:#000066;">=</span> Mar<span style="color:#000066;">.</span><span style="color:#006600;">Marshal</span><span style="color:#000066;">(</span>Kid<span style="color:#000066;">)</span> <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TJSONObject<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">FreeAndNil</span><span style="color:#000066;">(</span>Kid<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Mar<span style="color:#000066;">.</span><span style="color:#006600;">Free</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Output the JSON version of the Kid object</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">WriteLn</span><span style="color:#000066;">(</span>SerializedKid<span style="color:#000066;">.</span><span style="color:#006600;">ToString</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >// UnMarshalling Kid</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMar <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TJSONUnMarshal<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid <span style="color:#000066;">:</span><span style="color:#000066;">=</span> UnMar<span style="color:#000066;">.</span><span style="color:#006600;">UnMarshal</span><span style="color:#000066;">(</span>SerializedKid<span style="color:#000066;">)</span> <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TKid<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//now kid is the same as before marshalling</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span>Kid<span style="color:#000066;">.</span><span style="color:#006600;">FirstName</span> <span style="color:#000066;">=</span> <span style="color:#ff0000;">'Daniele'</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span>Kid<span style="color:#000066;">.</span><span style="color:#006600;">LastName</span> <span style="color:#000066;">=</span> <span style="color:#ff0000;">'Teti'</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span>Kid<span style="color:#000066;">.</span><span style="color:#006600;">Age</span> <span style="color:#000066;">=</span> <span style="color:#0000ff;">29</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Kid<span style="color:#000066;">.</span><span style="color:#006600;">Free</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMar<span style="color:#000066;">.</span><span style="color:#006600;">Free</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div></li></ol></pre></div><br /><br /><p>Simple, isn’t it?<br />To access the JSON string that is our object, we must call the method ToString.<br />The JSON representation of this object SerializedKid can be saved to file,<br />sent to a remote server, used by a Web page from a web service, stored on a database or sent into space (!!!).<br />The Delphi application re-read the JSON string, you can recreate the object as it was at the time of serialization.<br />But anyone with a JSON parser can still read the data in our object, even non Delphi client.<br />These are the advantages of having used an open format and standard.</p><br /><p><strong>So far the simple part …</strong><br />How serialize a field differently from the default?</p><br /><p>Suppose we add the date of birth to our TKid:</p><br /><br /><div class="wp-synhighlighter-expanded"><a name="#codesyntax3"></a>Code</div><br /><div class="wp-synhighlighter-inner"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >type</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TKid <span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >class</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> FirstName<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> LastName<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Age<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >Integer</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> BornDate<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div></li></ol></pre></div><br /><br /><p>Serialize a TDateTime, localized and that I have in JSON string is a float, because for Delphi TDateTime is a decimal number.<br />If I read the data from another program Delphi, no problem, but if I wanted to read a script in JavaScript? or. NET? or Ruby?<br />Then I use a format “DATA” to understand, even for these languages.<br />The new engine provides the serialization too.<br />Is needed, however, to tell the Marshaller and UnMarsheller how to represent and reconstruct a particular<br />object field by two statements like the following:</p><br /><br /><div class="wp-synhighlighter-collapsed"><a name="#codesyntax4"></a>Code</div><br /><div class="wp-synhighlighter-inner" style="DISPLAY: none"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-STYLE: italic;color:#808080;" >//marshaller</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterConverter</span><span style="color:#000066;">(</span>TKid<span style="color:#000066;">,</span> <span style="color:#ff0000;">'BornDate'</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">:</span> TRttiContext<span style="color:#000066;">;</span> <span style="color:#000066;">date</span> <span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">date</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> ctx<span style="color:#000066;">.</span><span style="color:#006600;">GetType</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">.</span><span style="color:#006600;">ClassType</span><span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetField</span><span style="color:#000066;">(</span>Field<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetValue</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">AsType</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#000066;">FormatDateTime</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'yyyy-mm-dd hh:nn:ss'</span><span style="color:#000066;">,</span> <span style="color:#000066;">date</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-STYLE: italic;color:#808080;" >//UnMarshaller</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterReverter</span><span style="color:#000066;">(</span>TKid<span style="color:#000066;">,</span> <span style="color:#ff0000;">'BornDate'</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >procedure</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span> Arg<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">:</span> TRttiContext<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> datetime<span style="color:#000066;">:</span><span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> datetime <span style="color:#000066;">:</span><span style="color:#000066;">=</span> EncodeDateTime<span style="color:#000066;">(</span><span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">1</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">4</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">6</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">9</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">12</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">15</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">18</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">0</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">.</span><span style="color:#006600;">GetType</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">.</span><span style="color:#006600;">ClassType</span><span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetField</span><span style="color:#000066;">(</span>Field<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">SetValue</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">,</span> datetime<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> </div></li></ol></pre></div><br /><br />The anonymous method is called when the marshaller serializes the field ‘BornDate’ is called “Converter” while Unmarshaller anonymous method that calls when he has to reconstruct the object from the JSON string is the “Reverter”.<br />Thus serializing a TKid assure you that my object is readable both by Delphi from another language without loss of information.<br /><p></p><br /><p>But what happens when I have to serialize a complex type?</p><br /><p>Suppose we extend TKid this:</p><br /><p><br /></p><br /><div class="wp-synhighlighter-expanded"><a name="#codesyntax5"></a>Code</div><br /><div class="wp-synhighlighter-inner"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >type</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TTeenager <span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >class</span><span style="color:#000066;">(</span>TKid<span style="color:#000066;">)</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Phones<span style="color:#000066;">:</span> TStringList<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >constructor</span> Create<span style="color:#000066;">;</span> <span style="FONT-WEIGHT: bold;color:#000000;" >virtual</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >destructor</span> Destroy<span style="color:#000066;">;</span> <span style="FONT-WEIGHT: bold;color:#000000;" >virtual</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div></li></ol></pre></div><br /><br /><p>We must define a Converter and a Reverter for the TStringList class.<br />We can do it this way:</p><br /><br /><div class="wp-synhighlighter-collapsed"><a name="#codesyntax6"></a>Code</div><br /><div class="wp-synhighlighter-inner" style="DISPLAY: none"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">:</span> TJSONMarshal<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">:</span> TJSONUnMarshal<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Teenager<span style="color:#000066;">:</span> TTeenager<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Value<span style="color:#000066;">,</span> JSONTeenager<span style="color:#000066;">:</span> TJSONObject<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TJSONMarshal<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">(</span>TJSONConverter<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterConverter</span><span style="color:#000066;">(</span>TTeenager<span style="color:#000066;">,</span> <span style="color:#ff0000;">'BornDate'</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">:</span> TRttiContext<span style="color:#000066;">;</span> <span style="color:#000066;">date</span> <span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">date</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> ctx<span style="color:#000066;">.</span><span style="color:#006600;">GetType</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">.</span><span style="color:#006600;">ClassType</span><span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetField</span><span style="color:#000066;">(</span>Field<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetValue</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">AsType</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#000066;">FormatDateTime</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'yyyy-mm-dd hh:nn:ss'</span><span style="color:#000066;">,</span> <span style="color:#000066;">date</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterConverter</span><span style="color:#000066;">(</span>TStringList<span style="color:#000066;">,</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfStrings</div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> i<span style="color:#000066;">,</span> count<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >integer</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> count <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TStringList<span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">count</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">SetLength</span><span style="color:#000066;">(</span>Result<span style="color:#000066;">,</span> count<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >for</span> i <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#0000ff;">0</span> <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> count <span style="color:#000066;">-</span> <span style="color:#0000ff;">1</span> <span style="FONT-WEIGHT: bold;color:#000000;" >do</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result<span style="color:#000066;">[</span>i<span style="color:#000066;">]</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TStringList<span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">[</span>i<span style="color:#000066;">]</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//TStringList Converter</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Teenager <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TTeenager<span style="color:#000066;">.</span><span style="color:#006600;">CreateAndInitialize</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Value <span style="color:#000066;">:</span><span style="color:#000066;">=</span> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">Marshal</span><span style="color:#000066;">(</span>Teenager<span style="color:#000066;">)</span> <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TJSONObject<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Teenager<span style="color:#000066;">.</span><span style="color:#006600;">Free</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">Free</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >// UnMarshalling Teenager</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TJSONUnMarshal<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterReverter</span><span style="color:#000066;">(</span>TTeenager<span style="color:#000066;">,</span> <span style="color:#ff0000;">'BornDate'</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >procedure</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span> Arg<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">:</span> TRttiContext<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> datetime<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> datetime <span style="color:#000066;">:</span><span style="color:#000066;">=</span> EncodeDateTime<span style="color:#000066;">(</span><span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">1</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">4</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">6</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">9</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">12</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">15</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">18</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">0</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">.</span><span style="color:#006600;">GetType</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">.</span><span style="color:#006600;">ClassType</span><span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetField</span><span style="color:#000066;">(</span>Field<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">SetValue</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">,</span> datetime<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterReverter</span><span style="color:#000066;">(</span>TStringList<span style="color:#000066;">,</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> TListOfStrings<span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StrList<span style="color:#000066;">:</span> TStringList<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Str</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StrList <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TStringList<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >for</span> <span style="color:#000066;">Str</span> <span style="FONT-WEIGHT: bold;color:#000000;" >in</span> Data <span style="FONT-WEIGHT: bold;color:#000000;" >do</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StrList<span style="color:#000066;">.</span><span style="color:#006600;">Add</span><span style="color:#000066;">(</span><span style="color:#000066;">Str</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result <span style="color:#000066;">:</span><span style="color:#000066;">=</span> StrList<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//TStringList Reverter</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Teenager <span style="color:#000066;">:</span><span style="color:#000066;">=</span> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">Unmarshal</span><span style="color:#000066;">(</span>Value<span style="color:#000066;">)</span> <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TTeenager<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'Daniele'</span> <span style="color:#000066;">=</span> Teenager<span style="color:#000066;">.</span><span style="color:#006600;">FirstName</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'Teti'</span> <span style="color:#000066;">=</span> Teenager<span style="color:#000066;">.</span><span style="color:#006600;">LastName</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#0000ff;">29</span> <span style="color:#000066;">=</span> Teenager<span style="color:#000066;">.</span><span style="color:#006600;">Age</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#000066;">EncodeDate</span><span style="color:#000066;">(</span><span style="color:#0000ff;">1979</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">11</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">4</span><span style="color:#000066;">)</span> <span style="color:#000066;">=</span> Teenager<span style="color:#000066;">.</span><span style="color:#006600;">BornDate</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#0000ff;">3</span> <span style="color:#000066;">=</span> Teenager<span style="color:#000066;">.</span><span style="color:#006600;">Phones</span><span style="color:#000066;">.</span><span style="color:#006600;">Count</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'NUMBER01&#8242;=Teenager.Phones[0]);</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Assert('</span>NUMBER02&<span style="color:#ff0000;">#824</span><span style="color:#0000ff;">2</span><span style="color:#000066;">;</span><span style="color:#000066;">=</span>Teenager<span style="color:#000066;">.</span><span style="color:#006600;">Phones</span><span style="color:#000066;">[</span><span style="color:#0000ff;">1</span><span style="color:#000066;">]</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'NUMBER03&#8242;=Teenager.Phones[2]);</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Teenager.Free;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> end;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> UnMarshaller.Free;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> end;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;">end;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> </div></li></ol></pre></div><br /><br /><p>There are different types of Converter and Reverter.<br />In the the DBXJSONReflect there are 8 types of converters:<br /><br /></p><br /><div class="wp-synhighlighter-collapsed"><a name="#codesyntax7"></a>Code</div><br /><div class="wp-synhighlighter-inner" style="DISPLAY: none"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> </div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert a field in an object array</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TObjectsConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfObjects<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert a field in a strings array</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TStringsConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfStrings<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert a type in an objects array</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TTypeObjectsConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfObjects<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert a type in a strings array</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TTypeStringsConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfStrings<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert a field in an object</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TObjectConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert a field in a string</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TStringConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert specified type in an object</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TTypeObjectConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >//Convert specified type in a string</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TTypeStringConverter <span style="color:#000066;">=</span> reference <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span></div></li></ol></pre></div><br /><br /><p></p><br /><p>Each of them deals with a particular conversion object representation in the final serialization, in our case we will use them to convert to JSON.</p><br /><p>Also in the DBXJSONReflect unit are defined many “Reverter” dealing with retrieving<br />the serialized version of the data and use it to reconstruct the object previously serialized.<br />Because they are complementary to the Converter, I will not copy them here.</p><br /><p>As a final example, we derive from TProgrammer by TTeenager adding a list of Laptops in the properties.</p><br /><p>Is therefore necessary to introduce a new pair of Converter / Reverter.<br />In this example I have defined all the converter and reverter in another unit in<br />order to have more readable code:</p><br /><br /><div class="wp-synhighlighter-expanded"><a name="#codesyntax8"></a><a onclick="javascript:wpContainer=this.parentNode.parentNode.getElementsByTagName('div')[1];	if(wpContainer.style.display=='none') {wpContainer.style.display=''; this.parentNode.className='wp-synhighlighter-expanded'} 	else {wpContainer.style.display='none'; this.parentNode.className='wp-synhighlighter-collapsed'}" href="http://www.danieleteti.it/?p=146#codesyntax8">Code</a></div><br /><div class="wp-synhighlighter-inner"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >type</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TLaptop <span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >class</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Model<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Price<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >Currency</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >constructor</span> Create<span style="color:#000066;">(</span>AModel<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span> APrice<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >Currency</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TLaptops <span style="color:#000066;">=</span> TObjectList<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> TProgrammer <span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >class</span><span style="color:#000066;">(</span>TTeenager<span style="color:#000066;">)</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops<span style="color:#000066;">:</span> TLaptops<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >constructor</span> Create<span style="color:#000066;">;</span> <span style="FONT-WEIGHT: bold;color:#000000;" >override</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >destructor</span> Destroy<span style="color:#000066;">;</span> <span style="FONT-WEIGHT: bold;color:#000000;" >override</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >class</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span> CreateAndInitialize<span style="color:#000066;">:</span> TProgrammer<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-STYLE: italic;color:#808080;" >// Implementation code&#8230;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">:</span> TJSONMarshal<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">:</span> TJSONUnMarshal<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Programmer<span style="color:#000066;">:</span> TProgrammer<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Value<span style="color:#000066;">,</span> JSONProgrammer<span style="color:#000066;">:</span> TJSONObject<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TJSONMarshal<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">(</span>TJSONConverter<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterConverter</span><span style="color:#000066;">(</span>TProgrammer<span style="color:#000066;">,</span> <span style="color:#ff0000;">'BornDate'</span><span style="color:#000066;">,</span> ISODateTimeConverter<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterConverter</span><span style="color:#000066;">(</span>TStringList<span style="color:#000066;">,</span> StringListConverter<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterConverter</span><span style="color:#000066;">(</span>TProgrammer<span style="color:#000066;">,</span> <span style="color:#ff0000;">'Laptops'</span><span style="color:#000066;">,</span> LaptopListConverter<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Programmer <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TProgrammer<span style="color:#000066;">.</span><span style="color:#006600;">CreateAndInitialize</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Value <span style="color:#000066;">:</span><span style="color:#000066;">=</span> Marshaller<span style="color:#000066;">.</span><span style="color:#006600;">Marshal</span><span style="color:#000066;">(</span>Programmer<span style="color:#000066;">)</span> <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TJSONObject<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >finally</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Free</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-STYLE: italic;color:#808080;" >// UnMarshalling Programmer</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TJSONUnMarshal<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterReverter</span><span style="color:#000066;">(</span>TProgrammer<span style="color:#000066;">,</span> <span style="color:#ff0000;">'BornDate'</span><span style="color:#000066;">,</span> ISODateTimeReverter<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterReverter</span><span style="color:#000066;">(</span>TStringList<span style="color:#000066;">,</span> StringListReverter<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">RegisterReverter</span><span style="color:#000066;">(</span>TProgrammer<span style="color:#000066;">,</span> <span style="color:#ff0000;">'Laptops'</span><span style="color:#000066;">,</span> LaptopListReverter<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Programmer <span style="color:#000066;">:</span><span style="color:#000066;">=</span> UnMarshaller<span style="color:#000066;">.</span><span style="color:#006600;">Unmarshal</span><span style="color:#000066;">(</span>Value<span style="color:#000066;">)</span> <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TProgrammer<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >try</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'Daniele'</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">FirstName</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'Teti'</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">LastName</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#0000ff;">29</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Age</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#000066;">EncodeDate</span><span style="color:#000066;">(</span><span style="color:#0000ff;">1979</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">11</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">4</span><span style="color:#000066;">)</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">BornDate</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#0000ff;">3</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Phones</span><span style="color:#000066;">.</span><span style="color:#006600;">Count</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'NUMBER01&#8242; = Programmer.Phones[0]);</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Assert('</span>NUMBER02&<span style="color:#ff0000;">#824</span><span style="color:#0000ff;">2</span><span style="color:#000066;">;</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Phones</span><span style="color:#000066;">[</span><span style="color:#0000ff;">1</span><span style="color:#000066;">]</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'NUMBER03&#8242; = Programmer.Phones[2]);</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Assert('</span>HP Presario C700&<span style="color:#ff0000;">#824</span><span style="color:#0000ff;">2</span><span style="color:#000066;">;</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Laptops</span><span style="color:#000066;">[</span><span style="color:#0000ff;">0</span><span style="color:#000066;">]</span><span style="color:#000066;">.</span><span style="color:#006600;">Model</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#0000ff;">1000</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Laptops</span><span style="color:#000066;">[</span><span style="color:#0000ff;">0</span><span style="color:#000066;">]</span><span style="color:#000066;">.</span><span style="color:#006600;">Price</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'Toshiba Satellite Pro'</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Laptops</span><span style="color:#000066;">[</span><span style="color:#0000ff;">1</span><span style="color:#000066;">]</span><span style="color:#000066;">.</span><span style="color:#006600;">Model</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#0000ff;">800</span> <span style="color:#000066;">=</span> Programmer<span style="color:#000066;">.</span><span style="color:#006600;">Laptops</span><span style="color:#000066;">[</span><span style="color:#0000ff;">1</span><span style="color:#000066;">]</span><span style="color:#000066;">.</span><span style="color:#006600;">Price</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Assert</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'IBM Travelmate 500&#8242; = Programmer.Laptops[2].Model);</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Assert(1300 = Programmer.Laptops[2].Price);</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> finally</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Programmer.Free;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> end;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> UnMarshaller.Free;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> end;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> finally</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> Marshaller.Free;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;"> end;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="color:#ff0000;">end;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> </div></li></ol></pre></div><br /><br /><p>Unit CustomConverter.pas contains all needed Converters/Reverts as anon methods.</p><br /><br /><div class="wp-synhighlighter-expanded"><a name="#codesyntax9"></a><a onclick="javascript:wpContainer=this.parentNode.parentNode.getElementsByTagName('div')[1];	if(wpContainer.style.display=='none') {wpContainer.style.display=''; this.parentNode.className='wp-synhighlighter-expanded'} 	else {wpContainer.style.display='none'; this.parentNode.className='wp-synhighlighter-collapsed'}" href="http://www.danieleteti.it/?p=146#codesyntax9">Code</a></div><br /><div class="wp-synhighlighter-inner"><pre class="delphi" style="FONT-FAMILY: monospace"><ol><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >unit</span> CustomConverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >interface</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >uses</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> DBXJSONReflect<span style="color:#000066;">,</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> MyObjects<span style="color:#000066;">;</span> <span style="FONT-STYLE: italic;color:#808080;" >//Needed by converter and reverter for TLaptops</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ISODateTimeConverter<span style="color:#000066;">:</span> TStringConverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ISODateTimeReverter<span style="color:#000066;">:</span> TStringReverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StringListConverter<span style="color:#000066;">:</span> TTypeStringsConverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StringListReverter<span style="color:#000066;">:</span> TTypeStringsReverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> LaptopListConverter<span style="color:#000066;">:</span> TObjectsConverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> LaptopListReverter<span style="color:#000066;">:</span> TObjectsReverter<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >implementation</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >uses</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> SysUtils<span style="color:#000066;">,</span> RTTI<span style="color:#000066;">,</span> DateUtils<span style="color:#000066;">,</span> Classes<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >initialization</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">LaptopListConverter <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfObjects</div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops<span style="color:#000066;">:</span> TLaptops<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> i<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >integer</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TProgrammer<span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">Laptops</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">SetLength</span><span style="color:#000066;">(</span>Result<span style="color:#000066;">,</span> Laptops<span style="color:#000066;">.</span><span style="color:#006600;">Count</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >if</span> Laptops<span style="color:#000066;">.</span><span style="color:#006600;">Count</span> > <span style="color:#0000ff;">0</span> <span style="FONT-WEIGHT: bold;color:#000000;" >then</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >for</span> I <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#0000ff;">0</span> <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> Laptops<span style="color:#000066;">.</span><span style="color:#006600;">Count</span> <span style="color:#000066;">-</span> <span style="color:#0000ff;">1</span> <span style="FONT-WEIGHT: bold;color:#000000;" >do</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result<span style="color:#000066;">[</span>I<span style="color:#000066;">]</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> Laptops<span style="color:#000066;">[</span>i<span style="color:#000066;">]</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">LaptopListReverter <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >procedure</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >String</span><span style="color:#000066;">;</span> Args<span style="color:#000066;">:</span> TListOfObjects<span style="color:#000066;">)</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> obj<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops<span style="color:#000066;">:</span> TLaptops<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptop<span style="color:#000066;">:</span> TLaptop<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> i<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >integer</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TProgrammer<span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">Laptops</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops<span style="color:#000066;">.</span><span style="color:#006600;">Clear</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >for</span> obj <span style="FONT-WEIGHT: bold;color:#000000;" >in</span> Args <span style="FONT-WEIGHT: bold;color:#000000;" >do</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> laptop <span style="color:#000066;">:</span><span style="color:#000066;">=</span> obj <span style="FONT-WEIGHT: bold;color:#000000;" >as</span> TLaptop<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Laptops<span style="color:#000066;">.</span><span style="color:#006600;">Add</span><span style="color:#000066;">(</span>TLaptop<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">(</span>laptop<span style="color:#000066;">.</span><span style="color:#006600;">Model</span><span style="color:#000066;">,</span> laptop<span style="color:#000066;">.</span><span style="color:#006600;">Price</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">StringListConverter <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> TListOfStrings</div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> i<span style="color:#000066;">,</span> count<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >integer</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> count <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TStringList<span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">count</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">SetLength</span><span style="color:#000066;">(</span>Result<span style="color:#000066;">,</span> count<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >for</span> i <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#0000ff;">0</span> <span style="FONT-WEIGHT: bold;color:#000000;" >to</span> count <span style="color:#000066;">-</span> <span style="color:#0000ff;">1</span> <span style="FONT-WEIGHT: bold;color:#000000;" >do</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result<span style="color:#000066;">[</span>i<span style="color:#000066;">]</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TStringList<span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">[</span>i<span style="color:#000066;">]</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">StringListReverter <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> TListOfStrings<span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StrList<span style="color:#000066;">:</span> TStringList<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">Str</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StrList <span style="color:#000066;">:</span><span style="color:#000066;">=</span> TStringList<span style="color:#000066;">.</span><span style="color:#006600;">Create</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000000;" >for</span> <span style="color:#000066;">Str</span> <span style="FONT-WEIGHT: bold;color:#000000;" >in</span> Data <span style="FONT-WEIGHT: bold;color:#000000;" >do</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> StrList<span style="color:#000066;">.</span><span style="color:#006600;">Add</span><span style="color:#000066;">(</span><span style="color:#000066;">Str</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result <span style="color:#000066;">:</span><span style="color:#000066;">=</span> StrList<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">ISODateTimeConverter <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >function</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span><span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">:</span> TRttiContext<span style="color:#000066;">;</span> <span style="color:#000066;">date</span> <span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">date</span> <span style="color:#000066;">:</span><span style="color:#000066;">=</span> ctx<span style="color:#000066;">.</span><span style="color:#006600;">GetType</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">.</span><span style="color:#006600;">ClassType</span><span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetField</span><span style="color:#000066;">(</span>Field<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetValue</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">AsType</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> Result <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="color:#000066;">FormatDateTime</span><span style="color:#000066;">(</span><span style="color:#ff0000;">'yyyy-mm-dd hh:nn:ss'</span><span style="color:#000066;">,</span> <span style="color:#000066;">date</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px">ISODateTimeReverter <span style="color:#000066;">:</span><span style="color:#000066;">=</span> <span style="FONT-WEIGHT: bold;color:#000000;" >procedure</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >TObject</span><span style="color:#000066;">;</span> Field<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">;</span> Arg<span style="color:#000066;">:</span> <span style="FONT-WEIGHT: bold;color:#000066;" >string</span><span style="color:#000066;">)</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >var</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">:</span> TRttiContext<span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> datetime <span style="color:#000066;">:</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="FONT-WEIGHT: bold;color:#000066;" >TDateTime</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >begin</span></div><li style="FONT-WEIGHT: bold; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> datetime <span style="color:#000066;">:</span><span style="color:#000066;">=</span> EncodeDateTime<span style="color:#000066;">(</span><span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">1</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">4</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">6</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">9</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#000066;">StrToInt</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> <span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">12</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">15</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#000066;">StrToInt</span><span style="color:#000066;">(</span><span style="color:#000066;">Copy</span><span style="color:#000066;">(</span>Arg<span style="color:#000066;">,</span> <span style="color:#0000ff;">18</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">2</span><span style="color:#000066;">)</span><span style="color:#000066;">)</span><span style="color:#000066;">,</span> <span style="color:#0000ff;">0</span><span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"> ctx<span style="color:#000066;">.</span><span style="color:#006600;">GetType</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">.</span><span style="color:#006600;">ClassType</span><span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">GetField</span><span style="color:#000066;">(</span>Field<span style="color:#000066;">)</span><span style="color:#000066;">.</span><span style="color:#006600;">SetValue</span><span style="color:#000066;">(</span>Data<span style="color:#000066;">,</span> datetime<span style="color:#000066;">)</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">;</span></div><li style="FONT-WEIGHT: normal; VERTICAL-ALIGN: top"><div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 1em/1.2em monospace; VERTICAL-ALIGN: top; PADDING-TOP: 0px"><span style="FONT-WEIGHT: bold;color:#000000;" >end</span><span style="color:#000066;">.</span></div></li></ol></pre></div><br /><br /><p><strong>Last hint…</strong><br />Every serialization/unserialization process can create “warnings”.<br />Those warnings are collected into the “Warnings” property of the Ser/UnSer Object. </p><br /><p><strong>Conclusions</strong><br />In this post I tried to introduce the basics of the new serialization engine in Delphi 2010.<br />During the next <a href="http://www.itdevcon.it/" target="_blank">ITDevCon</a> to be held in Italy next November 11.12, I’ll have a talk in which I will extensively talk about serialization and RTTI.<br />All interested smart developers are invited </p><br /><p>ITALIAN P.S.<br />Se qualche programmatore italiano volesse avere la versione in italiano di questo post può lasciare un commento e vedrò di accontentarlo </p><br /><p>You can find the DUnit project <a href="http://www.danieleteti.it/wp-content/uploads/2009/09/marshall_unmarshall_in_d2010.zip">Source Code</a></p>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-51878619778726537682009-09-02T18:14:00.000-07:002009-09-02T18:15:12.422-07:00What’s new in the Delphi and C++Builder DebuggerWant to find out? Be sure to sign up for CodeRage and check out my session. I just put the final touches on my presentation today. It’s nearly 35 minutes of non-stop demos showing many of the new debugger features in Delphi 2010 and C++Builder 2010. Several of the features have been blogged about already (by myself and others), but there are many things shown in the session that I haven’t seen mentioned yet, plus it’s always useful to see some features in action rather than just reading about them.<br /><br />My session will debut on Tuesday and then be repeated on Friday.<br /><br />Looks like there are plenty of great sessions throughout the week.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-67916541708529063402009-09-02T18:12:00.001-07:002009-09-02T18:12:38.850-07:00Dynamically compiling code with Delphi PrismDelphi Prism and the .NET Framework are both extremely powerful tools and bring a lot of flexibility that Delphi for Win32 cannot necessarily provide, particularly when it comes to reflection and code generation. I recently started a project where I wanted to be able to compile a string with Delphi Prism code into an assembly without hacking my way around with the Delphi Prism command line compiler. This could be used to potentially create a Delphi Prism Snippet Compiler similar to the .NET Snippet Compiler from Jeff Key.<br /><br />It is my intention that this post should introduce you to the process of dynamically compiling code and that the next part will hopefully be an introduction to the process of dynamically generating and compiling code using the .NET CodeDom.<br /><br />To begin with, create a New Console Application in Delphi Prism and Add a Reference to the RemObjects.Oxygene.CodeModel assembly. For my installation, this was found in the Bin directory of the Delphi Prism program files directory.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-5386162062837865232009-08-10T16:22:00.000-07:002009-08-10T16:23:07.933-07:00Lazarus article on Linux JournalI finally got around to browse the Linux Journal Magazine (September 2009) that this month features cross platform development, and noticed the word Lazarus at the top of the cover page. Yes, it is an article about the Delphi like IDE. The article is written by Mattias Gaertner, a member of the Lazarus project.<br /><br />The article is an overview of Lazarus/FPC and cross platform development. It explores Lazarus/FPC cross platform capabilities and dices into some of the IDE features. The cool aspect of this article is that is being presented in a non Delphi venue that is dedicating it’s pages to cross platform development. This exposing a Pascal IDE to a “new” audience.<br /><br />Most certainly, Lazarus brings to the table cross platform development in a way that is more native to your target than .NET et al. Lazarus produces native code for Windows, Macs and Linux. I can only imagine where we could have been if Borland would have gotten Kilyx right… In any case, I have played with Lazarus and FPC for the past couple of years and I am to a point that I am willing to start a small cross platform project solely using Lazarus and FPC.<br /><br />Here is a link to the article – unfortunately one has to be a subscriber to read. If you are not a subscriber, you can go to your local newsstand or book store and read the article.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-82276072500688305732009-08-10T16:19:00.000-07:002009-08-10T16:21:36.571-07:00RAD Studio 2010: First PreviewIt seems that Embarcadero sat in stone the release date of <strong>RAD Studio 2010</strong>. And it’s closer than others might expect: 24/25 August (depends on what part of the Globe you’re on). Also, it seems that IDE and the Debugger (as is shown in the video bellow)… were significantly improved in this release. I do think that after a long time these areas receive improvements, thing which is pretty encouraging. But we’ll see how each feature will pass the ‘community test’.<br /><br />See for yourself at:<br /><br />http://www.embarcadero.com/rad-studio-2010/hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-85834040273782202332009-08-10T16:16:00.000-07:002009-08-10T16:19:22.222-07:00RAD Studio 2010: ToolsAPI enhancements<p>With all the news filtering out about new IDE features and enhancements in RAD Studio 2010, I wanted to provide a quick "highlight" list of new things in the ToolsAPI, several of which correspond directly to new features. It should give you an idea of new things you can accomplish via IDE addins. Each bullet item also indicates the new or enhanced interfaces associated with the new feature.</p><br /><ul><br /><li>Support for creating dockable views in the IDE. This was previously achievable using the technique described by Allen in this article: http://edn.embarcadero.com/article/21114. Now, however, there is an official ToolsAPI way to do this. The TStrings Debugger Visualizer source can serve as one example of using the new interface. Pertinent interfaces: <strong>INTACustomDockableForm</strong> and <strong>INTAServices</strong></li><br /><li>Support for plugging in addtional views in the editor space. There is support for creating new top-level editor tabs (similar to the debugger’s CPU View or Modules view and the new C++ Class Explorer) as well as creating additional bottom-level tabs (similar to the "Code", "Design" and "History" tabs). I have a very simple example that creates both types of tabs. I’ll try to get it cleaned up and posted to CodeCentral soon. Pertinent interfaces: <strong>INTACustomEditorView</strong>, <strong>INTACustomEditorViewState</strong>, <strong>INTACustomEditorViewStatusPanel</strong>, <strong>INTACustomEditorSubView</strong>, and <strong>IOTAEditorViewServices</strong> and <strong>INTAEditorServices</strong>.</li><br /><li>Support for IDE Insight. Stay tuned to Mark’s blogs for more information here. Pertinent interfaces: <strong>INTAIDEInsightItem</strong>, <strong>IOTAIDEInsightCategory</strong>, <strong>IOTAIDEInsightNotifier</strong>, and <strong>IOTAIDEInsghtServices</strong>.</li><br /><li>There is enhanced support for adding menu items into the Project Manager local menu. The support provides more flexibility in terms of when and where your menu items appear. Pertinent interfaces: <strong>IOTAProjectMenuItemCreatorNotifier</strong>, <strong>IOTAProjectManager</strong>, <strong>IOTAProjectMenuContext</strong>, and <strong>IOTAProjectManagerMenu</strong>.</li><br /><li>IOTAProject has been enhanced to provide more complete information about which files make up a project, as well as providing better information regarding file renames and deletions. Pertinent interface: <strong>IOTAProject</strong>.</li><br /><li>Support for wrtiting and registering debugger visualizers. There are sample visualizers that ship with RAD Studio 2010 that demonstrate how to use these interfaces. You can find the source in the Source\Win32\Visualizers directory under the Rad Studio 2010 installation directory. Pertinent interfaces: <strong>IOTADebuggerVisualizer</strong>, <strong>IOTADebuggerVisualizerValueReplacer</strong>, <strong>IOTADebuggerVisualizerExternalViewer</strong>, <strong>IOTADebuggerVisualizerExternalViewerUpdater</strong>, and <strong>IOTADebuggerServices</strong>.</li><br /><li>Several debugger interfaces have been enhanced to support new features in the debugger (thread-specific breakpoints, freezing/thawing threads), as well as providing access to other information from the debugger (thread names, asking whether a particular type descends from another type, better access to module breakpoints). Pertinent interfaces: <strong>IOTAThread</strong>, <strong>IOTABreakpoint</strong>, and <strong>IOTADebuggerServices</strong>.</li><br /><li>Support for build system notifications (CompileStarted/CompileFinished events for Projects and ProjectGroups) as well as other build system services. Pertinent interfaces: <strong>IOTACompileNotifier</strong> and <strong>IOTACompileServices</strong>.</li><br /><li>New support for adding version control systems to the IDE. Pertinent interfaces: <strong>IOTAVersionControlNotifier</strong> and <strong>IOTAVersionControlServices</strong>.</li><br /><li>The IOTAElideActions interface (code folding support) has been enhanced to allow more code folding actions to be accessed via the ToolsAPI. Pertinent interface: <strong>IOTAElideActions</strong>.</li><br /></ul><br /><p>As always, the source code comments in the ToolsAPI.pas unit is the place to look for information for most of these ToolsAPI additions.</p><br /><p>And just because I’m sure someone will ask, there is still no "official" documentation of the ToolsAPI, though I’ve had several inquiries from the documentation team about reviving the old (circa Delphi 7) ToolsAPI documentation. So it wouldn’t surprise me to see the official documentation return in one form or another sometime in the future.</p>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-79812100579031924472009-07-25T16:48:00.000-07:002009-07-25T16:52:06.451-07:00TxdsControlsStates V1.1<span style="color:#3366ff;">TxdsControlsStates</span> is Delphi Component to store states of controls and components on your form to recall later during run-time.<br /><br /><span style="color:#3366ff;">TxdsControlsStates</span> allows you to eliminate that series of assignments and replace it with single method call to<br /><br /><span style="color:#3366ff;">TxdsControlsStates.RestoreState(StateName:String);<br /></span><br />The set of Component Properties and States are defined during design-time in property editor.<br /><br /><a href="http://www.xdenser.com/downloads/xds_states.zip" target="blank">Download here</a>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-77626706491240617172009-07-25T16:46:00.000-07:002009-07-25T16:47:48.146-07:00ATFileNotification V1.1.4<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZboGW0E66C6MfWicaunk1xAHJHHGAhJeZHHmu9CAKiqD0WXlTd5K7g2uRiBKWsb_eCEVKHOrwJpDXJsDAVuPshX-WcmWfiATXpDO8Xyvnah_oM6v5foWoxCIvnb0ZKPbAzrULuLKiZs0/s1600-h/ATFileNotification_Demo.gif"><img id="BLOGGER_PHOTO_ID_5362548660139776594" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 359px; CURSOR: hand; HEIGHT: 312px" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZboGW0E66C6MfWicaunk1xAHJHHGAhJeZHHmu9CAKiqD0WXlTd5K7g2uRiBKWsb_eCEVKHOrwJpDXJsDAVuPshX-WcmWfiATXpDO8Xyvnah_oM6v5foWoxCIvnb0ZKPbAzrULuLKiZs0/s400/ATFileNotification_Demo.gif" border="0" /></a><br /><div><strong>ATFileNotification</strong> is a non-visual component, which allows to watch for files/directories changes and to fire an event when change occurs.<br />It is improved version of fisFileNotification component. Improvements are:<br /><br />Component made Unicode compatible<br />FileName property added: you can watch for changes in a single file<br />Attempt to make component thread-safe (need feedback about it) </div><br /><div></div>hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-18804623197059437932009-07-25T16:42:00.000-07:002009-07-25T16:44:27.572-07:00AutoCorrect Components v1.0<strong>What does the code do exactly?</strong><br /><br />Implements for TCustomEdit and TCustomCombo descendents a large sub-set of the AutoCorrect functionality had by ‘proper’ word processors. Specifically, the following is implemented:<br /><br />User-defined ‘replace text as you type’ entries, including formatted ones if the active control is a rich edit.<br />TWo INitial CApitals correction, with an exception list that is automatically added to when the user immediately undoes a correction.<br />Conversion of ’straight’ quotes into ‘curly’ (‘smart’) quotes.<br />Conversion of hyphens to dashes: two hyphens in a row (–) turn into an em-dash, a hyphen with a space either side ( – ) becomes an en-dash with a space either side.<br />Conversion of 1/2 to ½, 1/4 to ¼, and 3/4 to ¾.<br />Auto-indentation for rich edit controls — in other words, allows the user to set the active paragraph’s left- and first-indent properties by tabbing and backspacing.<br />How does it work?<br /><br />In essence, the code works by trapping the KeyPress method (OnKeyPress event) of the active control, testing for a trigger key that will lead to correction testing proper kicking in. The initial trapping, however, is ‘manual’ in the sense that the TAutoCorrectEngine component does not actively ‘seek out’ key press events — it needs to be told about them.<br /><br /><strong>What’s the quickest way to see it in action?<br /></strong><br />Download the code from here (EDN registration required — it’s free and relatively easy to do though), open up the ‘AutoCorrect demo and design-time package’ project group, and run the last project listed (AutoCorrectDemo.dpr). Since the TAutoCorrectEngine component is created at runtime for the demo, no installation is required.<br /><br /><strong>How do I use the code myself?</strong><br /><br />Firstly, compile and install the design-time package, dclCCRAutoCorrect.dpk. This should lead to five new components being added to the component palette: TAutoCorrectEngine, TComboBoxWithAutoCorrect, TEditWithAutoCorrect, TMemoWithAutoCorrect and TRichEditWithAutoCorrect.<br />Ensure CCR.AutoCorrect.dcu and CCR.AutoCorrect.Consts.dcu end up somewhere in your library paths — the easiest way to do this is to add the component’s directory as a library path itself. In Delphi 2007, you do this by going to ToolsOptions, Environment Options -> Delphi Options -> Library – Win32, and clicking on the ellipsis button for ‘Library path’.<br />Create a new VCL forms application and add a TAutoCorrectEngine component to the main form; double click the component to add some custom ‘replace-as-you-type’ entries.<br />Add one or more TxxxWithAutoCorrect controls to the form, and assign their AutoCorrectEngine property to the TAutoCorrectEngine component.<br />Compile and run.<br />But I don’t want to use your custom descendants of TEdit, TRichEdit, etc.!<br /><br />No problem — you’ll just have to do a bit of manual work, calling as appropriate the KeyDownOccurred, KeyPressOccurred and UndoOccurred methods of the TAutoCorrectEngine component. The last of these is best done by defining an undo action (i.e., a TAction with Ctrl+Z as its shortcut), UndoOccurred being called immediately after the undo operation is performed. As for the other two, you can either handle the OnKeyXXX events of the controls themselves or (if you set KeyPreview to True) the parent form — in the second case, pass ActiveControl as the first parameter to KeyXXXOccurred. See the main demo for an example of all this — the process is simpler than it may sound.<br /><br /><strong>The small print</strong><br /><br />Target Delphi versions: separate versions for Delphi 7 on the one hand, and Delphi 2006 or greater on the other, are included in the ZIP — both versions’ functionality and implementation are almost identical however.<br /><br />Turbo Delphi Explorer compatibility: since you don’t need to install TAutoCorrectEngine to actually use it, and adding custom entries at runtime is pretty easy. Check out the main demo, which doesn’t use a design-time instance of the component and so can be open and run from inside the Turbo Delphi IDE.<br /><br />Rich edit bugs: note that the TRichEditWithAutoCorrect class works around bugs in the underlying DLL the VCL’s TCustomRichEdit wraps. Specifically, v1 of the DLL (used until Delphi 2009) uncurls smart quotes when they are streamed or pasted in, and v1 to v3 of the DLL don’t load en- and em-dashes correctly, loading them as hyphens.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0tag:blogger.com,1999:blog-1881358427466534365.post-66678450037794721052009-05-23T05:29:00.000-07:002009-05-23T05:30:04.498-07:00We have huge amounts of memory and concurrent programming is an exceptionIt's quite amazing to hear Anders advocating bloat in a world where most of the world still has bad internet connections and hate large downloads, mobile phones prefer 1MB applications over 10MB apps, where RAM can be a bottleneck, where battery life is always too short and where many large organizations struggle with bad performance.<br /><br />I recently had the chance to see the standard configuration for virtual servers in a large organization. In order to improve network traffic, the standard network adapter is limited to 10Mbit/sec.hidelphihttp://www.blogger.com/profile/15186454371633228380noreply@blogger.com0