locked
Web API Error - The 'ObjectContent`1' type failed to serialize RRS feed

  • Question

  • I am new to Web API.   I am getting the error at the bottom of this page.  I see many others have gotten this error as well.  Is it something am doing incorrectly, or a bug ?  

    Note that I do want to return xml.   If I add the following to the WebApiConfig file (as suggested in another post), I do not get the error, but then I am only getting json.   

    Thanks !

    var json = config.Formatters.JsonFormatter;json.SerializerSettings.PreserveReferencesHandling =Newtonsoft.Json.PreserveReferencesHandling.Objects;config.Formatters.Remove(config.Formatters.XmlFormatter);   

    My classes are below...


    namespace DomainClasses { using System; using System.Collections.Generic; public partial class sgtWBOrderHeader { public sgtWBOrderHeader() { this.sgtWBOrderDetails = new HashSet<sgtWBOrderDetail>(); } public int hWebID { get; set; } public Nullable<System.DateTime> OrderDate { get; set; } public string Customer { get; set; } public string CustomerName { get; set; } public string ShipAddr1 { get; set; } public string ShipAddr2 { get; set; } public string ShipAddr3 { get; set; } public virtual ICollection<sgtWBOrderDetail> sgtWBOrderDetails { get; set; } } }



    namespace DomainClasses
    {
        using System;
        using System.Collections.Generic;
        
        public partial class sgtWBOrderDetail
        {
            public int dWebID { get; set; }
            public int LineID { get; set; }
            public string StockCode { get; set; }
            public string Description { get; set; }
            public Nullable<decimal> OrderQty { get; set; }
            public Nullable<decimal> UnitPrice { get; set; }
        
            public virtual sgtWBOrderHeader sgtWBOrderHeader { get; set; }
        }
    }
    

    <Error>

    <Message>An error has occurred.</Message>
    <ExceptionMessage>
    The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
    </ExceptionMessage>
    <ExceptionType>System.InvalidOperationException</ExceptionType>
    <StackTrace/>
    <InnerException>
    <Message>An error has occurred.</Message>
    <ExceptionMessage>
    Type 'System.Data.Entity.DynamicProxies.sgtWBOrderHeader_4A1AB5D8B45A5B29A3CC9AA93C68026AB362DB4CB0525CF95AFFFCDD659EFC9B' with data contract name 'sgtWBOrderHeader_4A1AB5D8B45A5B29A3CC9AA93C68026AB362DB4CB0525CF95AFFFCDD659EFC9B:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
    </ExceptionMessage>
    <ExceptionType>
    System.Runtime.Serialization.SerializationException
    </ExceptionType>
    Tuesday, July 22, 2014 10:17 PM

Answers

  • Indirectly, yes. That's the navigation property on the detail that points back to the header. That will create a cycle that the serializer can't deal with. You can either remove the navigation property or suppress its serialization.

    eg add a project reference to System.Runtime.Serialization.dll and then:

       public partial class sgtWBOrderDetail
        {
            [Key]
            public int dWebID { get; set; }
            public int LineID { get; set; }
            public string StockCode { get; set; }
            public string Description { get; set; }
            public Nullable<decimal> OrderQty { get; set; }
            public Nullable<decimal> UnitPrice { get; set; }
    
            [System.Runtime.Serialization.IgnoreDataMember]
            public virtual sgtWBOrderHeader sgtWBOrderHeader { get; set; }
        }

    David


    David http://blogs.msdn.com/b/dbrowne/


    Friday, July 25, 2014 2:23 PM

All replies

  • I'm confused!!!  Serialized data is always XML so what format are you looking for?  Serialized data is tagged data so you can de-serialize the results and get what you started with.

    jdweng

    Wednesday, July 23, 2014 3:40 AM
  • Ok... sorry...

    When I invoke the code below...

    namespace WBAPI.Controllers
    {
        public class OrdersController : ApiController
        {
    
            WBRepo _repo = new WBRepo();
    
            [HttpGet]
            public IEnumerable<sgtWBOrderHeader> GetOrders()
            {
                return _repo.GetOrders();
            }
        }
    }

    Which is supposed to return xml... I get the error listed above...  (I have placed a snippet below.)

    <ExceptionMessage>
    The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.

    </ExceptionMessage>

    This is the same error many other people are receiving in similar circumstances.   One of the "workarounds" is to place the code I mentioned above in the WebApiConfig file.    When I place the code there, the call above returns json data, not the error.  However, I want xml data to be returned... not the error.  

    Thanks

     

    Wednesday, July 23, 2014 4:08 AM
  • Where is the code for class WBRepo?

    jdweng

    Wednesday, July 23, 2014 4:57 AM
  • namespace WBRepository
    {
        public class WBRepo
        {
            readonly WBEntities _context = new WBEntities();
    
            
            public IEnumerable<sgtWBOrderHeader> GetOrders()
            {
                return _context.sgtWBOrderHeaders;
    
            }
    
                  
        }
    }

    Wednesday, July 23, 2014 10:03 AM
  • The class must be marked as a Serializable class/object, which results is a XML serialized object being returned.

    http://msdn.microsoft.com/en-us/library/system.serializableattribute(v=vs.110).aspx

    http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute(v=vs.110).aspx

    If .NET doesn't automaically serialize the object, then you have to do it with code.

    Wednesday, July 23, 2014 4:47 PM
  • Thanks for the response...

    Note the warning... but I made a change anyway... I tried adding the Serializable decoration, but it resulted in the same error.  Is this what you were suggesting ? Is there another step or attribute I must change ? 

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated from a template.
    //
    //     Manual changes to this file may cause unexpected behavior in your application.
    //     Manual changes to this file will be overwritten if the code is regenerated.
    // </auto-generated>
    //----------

      

    namespace DomainClasses
    {
        using System;
        using System.Collections.Generic;
    
        [Serializable()]
        public partial class sgtWBOrderHeader
        {
            public sgtWBOrderHeader()
            {
                this.sgtWBOrderDetails = new HashSet<sgtWBOrderDetail>();
            }
        
            public int hWebID { get; set; }
            public Nullable<System.DateTime> OrderDate { get; set; }
            public string Customer { get; set; }
            public string CustomerName { get; set; }
            public string ShipAddr1 { get; set; }
            public string ShipAddr2 { get; set; }
            public string ShipAddr3 { get; set; }
        
            public virtual ICollection<sgtWBOrderDetail> sgtWBOrderDetails { get; set; }
        }
    }
    
    namespace DomainClasses
    {
        using System;
        using System.Collections.Generic;
    
        [Serializable()]
        public partial class sgtWBOrderDetail
        {
            public int dWebID { get; set; }
            public int LineID { get; set; }
            public string StockCode { get; set; }
            public string Description { get; set; }
            public Nullable<decimal> OrderQty { get; set; }
            public Nullable<decimal> UnitPrice { get; set; }
        
            public virtual sgtWBOrderHeader sgtWBOrderHeader { get; set; }
        }
    }
    

    Wednesday, July 23, 2014 5:04 PM
  • Note the warning... but I made a change anyway... I tried adding the Serializable decoration, but it resulted in the same error.  Is this what you were suggesting ? Is there another step or attribute I must change ?

    Well, what it means is that .NET is not going to seralize and desearlize the object for you, like if the object was being being passed between a WCF cleint and WCF service with the class/object being marked [Serializable]. It means you have to have code in your solution that is going to XML seralize the object, send it and  desealize the XML back to an object on the other end. You have to do it.

    There should be plenty of examples out on Bing or Google on how to nseralize an object to XML and desearlize the XML back to an object. And you still need the [Seaializable] decorating the class I think in the current versions on the .NET Framework.

    Wednesday, July 23, 2014 5:20 PM
  • This is a Web API project.   I thought it was supposed to do this for you ?  Simply pick the format, and the result is rendered.   JSON works fine, but not XML ?
    Wednesday, July 23, 2014 5:30 PM
  • This is a Web API project.   I thought it was supposed to do this for you ?  Simply pick the format, and the result is rendered.   JSON works fine, but not XML ?

    Well, obviously, it's not doing it the XML seralization, becuase otherwise, it wouldn't be barking about it. I don't know about some Web API -- never used it. But I know what that error message means, which is the object being sent is not XML serialized.

    Wednesday, July 23, 2014 5:40 PM
  • Ok, what writes to _repo?

    WBRepo _repo = new WBRepo();


    jdweng

    Wednesday, July 23, 2014 11:59 PM
  • I copied your code into a new WebAPI project with EF 6 and it worked fine.  My guess is that returning a DbSet<T> from your repository is fouling things up, as the DbSet<T> is _not_ a collection.  It's a query endpoint for interacting with the database, and it's definitely connected to your ObjectContext and your database.   Perpahs a later version of WebAPI is coded to handle this situation, where your controller returns a query instead of a collection.

    Instead your repository should run a query and return a collection of objects.  Like this:

        public class WBRepo
        {
            readonly WBEntities _context = new WBEntities();
    
    
            public IEnumerable<sgtWBOrderHeader> GetOrders()
            {
                return _context.sgtWBOrderHeaders.ToList() ;
            }
    
    
        }

    The ToList() will run the query and collect the results before returning them to the caller.  The collection of disconnected entities will then be serialized.

    David


    David http://blogs.msdn.com/b/dbrowne/

    Thursday, July 24, 2014 2:55 PM
  • Thanks for the reply.... 

    This is killing me...  I tried your suggestion, but it is not working for me.  When I specified application/json I did get a result, but the "detail" lines were missing.   When I specified application/xml, I received another serialization error.   It is very likely something else I am doing wrong.    

    I tend to think my issue (besides being green to EF and Web API), has something to do with the fact that the header and detail classes reference each other.   I think that the solution may require the use of DTOs.   Data Transformation Objects as outlined in this article ?    I did turn off Lazy loading as well.   (Right click in diagram and set to False.)

    http://petermcintyre.com/topics/web-api-problems-and-solutions/



    Thursday, July 24, 2014 3:40 PM
  • I have made these additions  but do not quite know how to get the detail data to render...

    Added classes to do the DTO...

        public class sgtWBOrderHeaderDTO
        {
            public int hWebID { get; set; }
            public Nullable<System.DateTime> OrderDate { get; set; }
            public string Customer { get; set; }
            public string CustomerName { get; set; }
            public string ShipAddr1 { get; set; }
            public string ShipAddr2 { get; set; }
            public string ShipAddr3 { get; set; }
            public ICollection<sgtWBOrderDetailDTO> sgtWBOrderDetails { get; set; }
        }
    
        public partial class sgtWBOrderDetailDTO
        {
            public int dWebID { get; set; }
            public int LineID { get; set; }
            public string StockCode { get; set; }
            public string Description { get; set; }
            public Nullable<decimal> OrderQty { get; set; }
            public Nullable<decimal> UnitPrice { get; set; }
    
        }
    

    Then in the repository, I am trying to render the data, but cannot get to the "details"....

    public IEnumerable<sgtWBOrderHeaderDTO> GetOrderWithDetailsDTO()
            {
    
                var o = _context.sgtWBOrderHeaders;
               
                List<sgtWBOrderHeaderDTO> ls= new List<sgtWBOrderHeaderDTO>();
    
                foreach(var ord in o)
                {
                    sgtWBOrderHeaderDTO p = new sgtWBOrderHeaderDTO();
                    p.hWebID = ord.hWebID;
                    p.Customer = ord.Customer;
                    p.CustomerName = ord.CustomerName;
                    // how to get to the Detail rows ?
                    ls.Add(p);
                }
    
                return ls.AsEnumerable();
               
            }

    Thursday, July 24, 2014 4:15 PM
  • Thursday, July 24, 2014 4:26 PM
  • Hmm.  While I still can't repro this, the next thing to do is to explicitly turn of Laxy Loading and Proxy Creation on you DbContext.  With the virtual methods, EF will use a runtime-generated proxy type to enable Lazy Loading.  And it looks like you can't serialize those proxy types correctly.

        public class WBRepo
        {
            readonly WBEntities _context;
    
            public WBRepo()
            {
                _context = new WBEntities();
                _context.Configuration.LazyLoadingEnabled = false;
                _context.Configuration.ProxyCreationEnabled = false;
            }
    
            public IEnumerable<sgtWBOrderHeader> GetOrders()
            {
                return _context.sgtWBOrderHeaders ;
            }
        }
    David


    David http://blogs.msdn.com/b/dbrowne/

    Thursday, July 24, 2014 6:00 PM
  • Thanks again...

    The good news is that when I make the suggested changes, I do not get the error.   Unfortunately, I do not get any of the order "detail" data either.

    I also tried this...  but got the serialization error again.

    public IEnumerable<sgtWBOrderHeader> GetOrders()
     {return _context.sgtWBOrderHeaders.Include("sgtWBOrderDetails").AsEnumerable();
    
    }


    Friday, July 25, 2014 3:15 AM
  • Don't know if the fact that I went database first has anything to do with it ?  SQL objects and data below...
    /****** Object:  Table [dbo].[sgtWBOrderDetail]    Script Date: 7/25/2014 7:21:16 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[sgtWBOrderDetail](
    	[dWebID] [int] NOT NULL,
    	[LineID] [int] NOT NULL,
    	[StockCode] [varchar](30) NULL,
    	[Description] [varchar](30) NULL,
    	[OrderQty] [decimal](10, 3) NULL,
    	[UnitPrice] [decimal](15, 5) NULL,
     CONSTRAINT [PK_sgtWBOrderDetail] PRIMARY KEY CLUSTERED 
    (
    	[dWebID] ASC,
    	[LineID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    SET ANSI_PADDING OFF
    GO
    /****** Object:  Table [dbo].[sgtWBOrderHeader]    Script Date: 7/25/2014 7:21:16 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[sgtWBOrderHeader](
    	[hWebID] [int] NOT NULL,
    	[OrderDate] [datetime] NULL,
    	[Customer] [varchar](50) NULL,
    	[CustomerName] [varchar](50) NULL,
    	[ShipAddr1] [varchar](50) NULL,
    	[ShipAddr2] [varchar](50) NULL,
    	[ShipAddr3] [varchar](50) NULL,
     CONSTRAINT [PK_sgtWBOrderHeader] PRIMARY KEY CLUSTERED 
    (
    	[hWebID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    SET ANSI_PADDING OFF
    GO
    ALTER TABLE [dbo].[sgtWBOrderDetail]  WITH NOCHECK ADD  CONSTRAINT [FK_sgtWBOrderDetail_sgtWBOrderHeader] FOREIGN KEY([dWebID])
    REFERENCES [dbo].[sgtWBOrderHeader] ([hWebID])
    NOT FOR REPLICATION 
    GO
    ALTER TABLE [dbo].[sgtWBOrderDetail] NOCHECK CONSTRAINT [FK_sgtWBOrderDetail_sgtWBOrderHeader]
    GO
    
    insert into sgtWBOrderHeader (hWebID,OrderDate,Customer,CustomerName,ShipAddr1,ShipAddr2,ShipAddr3)
    Select 333,'7/24/2014','0000002','Smith','222 North St.', 'Mobile','AL'
    
    insert into sgtWBOrderHeader (hWebID,OrderDate,Customer,CustomerName,ShipAddr1,ShipAddr2,ShipAddr3)
    Select 444,'7/23/2014','0000003','Jones','365 South St.', 'New York','NY'
    
    
    insert into sgtWBOrderDetail (dWebID,LineID,StockCode,Description,OrderQty,UnitPrice)
    Select 333,1,'A100','Bike Seat',25,35
    
    insert into sgtWBOrderDetail (dWebID,LineID,StockCode,Description,OrderQty,UnitPrice)
    Select 333,2,'A200','Bike Pump',50,10
    
    insert into sgtWBOrderDetail (dWebID,LineID,StockCode,Description,OrderQty,UnitPrice)
    Select 444,1,'B100','Bike Tire',500,7.55
    
    insert into sgtWBOrderDetail (dWebID,LineID,StockCode,Description,OrderQty,UnitPrice)
    Select 444,2,'A200','Bike Lock',75,8.99
    
    

    Friday, July 25, 2014 11:39 AM
  • Try

    public IEnumerable<sgtWBOrderHeader> GetOrders()
    {
       var data = context.sgtWBOrderHeaders.Include("sgtWBOrderDetails").ToList();
      return data;
    
    }

    And put a breakpoint on the 'return data;' line and inspect the object graph to ensure that everything looks correct.

    David


    David http://blogs.msdn.com/b/dbrowne/

    Friday, July 25, 2014 11:47 AM
  • Thanks again...

    If this is the object graph.... it does look correct (I have 4 header rows)  in my db and the detail rows are present.   Does that imply that my EF stuff is ok and the issue resides somewhere with Web API or my use of it ?   I used VS 2013 Update 1 to create the project.  When this started to occur I upgraded to Update 2. EF is using 6.1



    Upon continuing I get the following error (with a very large StackTrace)...

    <Error>
    <Message>An error has occurred.</Message>
    <ExceptionMessage>
    The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
    </ExceptionMessage>
    <ExceptionType>System.InvalidOperationException</ExceptionType>
    <StackTrace/>
    <InnerException>
    <Message>An error has occurred.</Message>
    <ExceptionMessage>
    Object graph for type 'System.Collections.Generic.HashSet`1[[DomainClasses.sgtWBOrderDetail, DomainClasses, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' contains cycles and cannot be serialized if reference tracking is disabled.
    </ExceptionMessage>
    <ExceptionType>
    System.Runtime.Serialization.SerializationException
    </ExceptionType>
    <StackTrace>
    at System.Runtime.Serialization.XmlObjectSerializerWriteContext.OnHandleReference(XmlWriterDelegator xmlWriter, Object obj, Boolean canContainCyclicReference) at WritesgtWBOrderHeaderToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract ) at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle) at WritesgtWBOrderDetailToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract ) at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTyp

     
    Friday, July 25, 2014 12:11 PM
  • Make sure after an update that the test data getes regenerated.  If serialize/deserialized data isn't run with the same methods you can get errors. 

    You are saying the data is getting deserialized properly but getting an error in the serialize method?  Is the code working with the first block of serialized data, but failing with the second data block.  The exception implies an alignment issue with the data in the serialization.  Are you trying to send an array of block data or one continous block of data.


    jdweng

    Friday, July 25, 2014 12:25 PM
  • Thanks...

    Sorry, not sure I completely understand the question....

    I am trying to make a call to return all order header and detail information (link on order ID).    Calls where the class structure is flat appear to work fine.    It looks like other people getting this same error have resorted to using DTOs ?   

    Here is the call from the Orders Controller (so I assume it should return one continuous block of data)...

     
     public class OrdersController : ApiController
        {
    
            WBRepo _repo = new WBRepo();
    
            [HttpGet]
            public IEnumerable<sgtWBOrderHeader> GetOrders()
            {
                return _repo.GetOrders();
            }
    
         
        }

    Friday, July 25, 2014 12:57 PM
  • Actually upon closer inspection.... maybe this is the issue...the header is listed on the detail row ?

    Friday, July 25, 2014 1:30 PM
  • Indirectly, yes. That's the navigation property on the detail that points back to the header. That will create a cycle that the serializer can't deal with. You can either remove the navigation property or suppress its serialization.

    eg add a project reference to System.Runtime.Serialization.dll and then:

       public partial class sgtWBOrderDetail
        {
            [Key]
            public int dWebID { get; set; }
            public int LineID { get; set; }
            public string StockCode { get; set; }
            public string Description { get; set; }
            public Nullable<decimal> OrderQty { get; set; }
            public Nullable<decimal> UnitPrice { get; set; }
    
            [System.Runtime.Serialization.IgnoreDataMember]
            public virtual sgtWBOrderHeader sgtWBOrderHeader { get; set; }
        }

    David


    David http://blogs.msdn.com/b/dbrowne/


    Friday, July 25, 2014 2:23 PM
  • Thanks so much for your help !

    <ArrayOfsgtWBOrderHeader xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/DomainClasses">
    <sgtWBOrderHeader>
    <Customer>0000007</Customer>
    <CustomerName>Smith</CustomerName>
    <OrderDate>2014-07-19T00:00:00</OrderDate>
    <ShipAddr1>123 Elm Street</ShipAddr1>
    <ShipAddr2>Atlanta</ShipAddr2>
    <ShipAddr3>GA</ShipAddr3>
    <hWebID>111</hWebID>
    <sgtWBOrderDetails>
    <sgtWBOrderDetail>
    <Description>Bike Seat</Description>
    <LineID>1</LineID>
    <OrderQty>2.000</OrderQty>
    <StockCode>A100</StockCode>
    <UnitPrice>35.50000</UnitPrice>
    <dWebID>111</dWebID>
    </sgtWBOrderDetail>
    <sgtWBOrderDetail>
    <Description>Bike Tire</Description>
    <LineID>2</LineID>
    <OrderQty>3.000</OrderQty>
    <StockCode>B100</StockCode>
    <UnitPrice>55.60000</UnitPrice>
    <dWebID>111</dWebID>
    </sgtWBOrderDetail>
    </sgtWBOrderDetails>
    </sgtWBOrderHeader>
    <sgtWBOrderHeader>
    <Customer>0000008</Customer>
    <CustomerName>Jones</CustomerName>
    <OrderDate>2014-07-09T00:00:00</OrderDate>
    <ShipAddr1>345 Main Street</ShipAddr1>
    <ShipAddr2>New York</ShipAddr2>
    <ShipAddr3>NY</ShipAddr3>
    <hWebID>222</hWebID>
    <sgtWBOrderDetails>

    Friday, July 25, 2014 2:41 PM