Solved

Deserializations of xml file - IXmlSerializable

Posted on 2009-05-15
19
1,039 Views
Last Modified: 2013-12-17
Hi, I have a xml file as below :
So far i am able to do everything but i cannot deserialize the orderline element.
I read some notes  and it directs to use IXmlSerializable  for the class.
Even after that i am quite confised.
How do i deserialise Order  so that it can have multiple orderline elements.

*************************************
<biztalk_1>
      
      <body>
            <Order >
                  
                  </OrderLine>
                               <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCodexxxxx</BuyersProductCode>
                              <Description>xxxx1 customer Part List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
</OrderLine>
                               <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCodexxxxx</BuyersProductCode>
                              <Description>xxxx1 customer Part List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
*************************************************************************************************************
public class biztalk_1

    {

        public body body;

    }

    public class body

    {

        [XmlElement("Order")]

        public Order Order;

    }

    public class Order

    {

         public List<orderLine> OrderLine;

    }

         

    public class OrderLine

    {

        private int _LineNumber;

        private Product _Product;

        private Quantity _Quantity;

        

        public int LineNumber

        {

            set { _LineNumber = value; }

            get { return _LineNumber; }

        }

        public Product Product

        {

            set { _Product = value; }

            get { return _Product; }

        }

        public Quantity Quantity

        {

            set { _Quantity = value; }

            get { return _Quantity; }

        }  

    }

    public class Product

    {

        private string _BuyersProductCode;

        private string _Description;

 

        public string BuyersProductCode

        {

            set { _BuyersProductCode = value; }

            get { return _BuyersProductCode; }

        }

        public string Description

        {

            set { _Description = value; }

            get { return _Description; }

        }

    }

    public class Quantity

    {

        private int _Amount;

        public int Amount

        {

            set { _Amount = value; }

            get { return _Amount; }

        }

    }

Open in new window

0
Comment
Question by:WannabeNerd
  • 10
  • 6
  • 2
  • +1
19 Comments
 
LVL 13

Expert Comment

by:iHadi
Comment Utility
Hi

you have a error in your Xml file syntax. you do not have an opening OrderLine tag. your are starting immediately with the closing tag </OrderLine>.
0
 

Author Comment

by:WannabeNerd
Comment Utility
Oh sorry  my mistake. Actually i am more looking for concept then code.
If anyone will give me concept how i will achieve this that will be great.
0
 

Author Comment

by:WannabeNerd
Comment Utility
    <Order >
                 
                  <OrderLine>
                               <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCodexxxxx</BuyersProductCode>
                              <Description>xxxx1 customer Part List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                               <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCodexxxxx</BuyersProductCode>
                              <Description>xxxx1 customer Part List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
</Order>
0
 
LVL 26

Expert Comment

by:Anurag Thakur
Comment Utility
your serialized xml file should be in the same format as the object you are going to deserialize it into
read the folloing articles might help you in understanding the concept a little better
http://geekswithblogs.net/TimH/archive/2006/02/09/68857.aspx
http://sharpertutorials.com/serialization/
0
 

Author Comment

by:WannabeNerd
Comment Utility
Yea the concep is clear about it but as you can see that i have more then one OrderLine Object.
and order line is a class. How do i deserialize it ?

do i have to create array of class or something like it ?
0
 
LVL 11

Expert Comment

by:saragani
Comment Utility
Well, your XML contains some problems, like <BuyersProductCodexxxxx
while it should be <BuyersProductCode>xxxxx

Beside that, your XML design shows that Order is the list of the OrderLines, so instead of having a class called order which contain a list, make Order to be the list.


The XML file:

<biztalk_1>
     
      <body>
     <Order >
                 
                  <OrderLine>
                               <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxxxx</BuyersProductCode>
                              <Description>xxxx1 customer Part List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                               <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxxxx</BuyersProductCode>
                              <Description>xxxx1 customer Part List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
      </Order>  
      </body>
</biztalk_1>



The Class structure:


    public class biztalk_1
    {
        public body body;
    }
    public class body
    {
        public List<OrderLine> Order;
    }

    public class OrderLine
    {
        private int _LineNumber;
        private Product _Product;
        private Quantity _Quantity;

        public int LineNumber
        {
            set { _LineNumber = value; }
            get { return _LineNumber; }
        }
        public Product Product
        {
            set { _Product = value; }
            get { return _Product; }
        }
        public Quantity Quantity
        {
            set { _Quantity = value; }
            get { return _Quantity; }
        }
    }
    public class Product
    {
        private string _BuyersProductCode;
        private string _Description;

        public string BuyersProductCode
        {
            set { _BuyersProductCode = value; }
            get { return _BuyersProductCode; }
        }
        public string Description
        {
            set { _Description = value; }
            get { return _Description; }
        }
    }
    public class Quantity
    {
        private int _Amount;
        public int Amount
        {
            set { _Amount = value; }
            get { return _Amount; }
        }
    }




And the code for the deserialization:

            XmlSerializer xs = new XmlSerializer(typeof(biztalk_1));
            biztalk_1 bt;
            using (FileStream fs = new FileStream(@"c:\1.xml",FileMode.Open))
            {
                bt = (biztalk_1)xs.Deserialize(fs);
            }


This way you don't even need to remember to close the FileStream
0
 

Author Comment

by:WannabeNerd
Comment Utility
Yea i tried it but if you'll see that i have mroe elements in order elemtent. What i am going to do with that ?
Actual XML :-
*********************


<biztalk_1 xmlns="urn:schemas-biztalk-org:biztalk:biztalk_1">
      <header>
            <delivery>
                  <message/>
                  <to>
                        <address/>
                  </to>
                  <from>
                        <address/>
                  </from>
            </delivery>
            <manifest>
                  <document>
                        <name>Order</name>
                        <description>EBis Order</description>
                  </document>
            </manifest>
      </header>
      <body>
            <Order xmlns="urn:www.basda.org/schema/eBIS-XML_order_v3.00.xml">
                  <OrderHead>
                        <Schema>
                              <Version>3.00</Version>
                        </Schema>
                        <Stylesheet>
                              <StylesheetOwner/>
                              <StylesheetName>eBIS_MAM.xsl</StylesheetName>
                              <Version/>
                              <StylesheetType>xsl</StylesheetType>
                        </Stylesheet>
                        <Parameters>
                              <Language>en_GB</Language>
                              <DecimalSeparator>.</DecimalSeparator>
                              <Precision>20.2</Precision>
                        </Parameters>
                        <OriginatingSoftware>
                              <SoftwareManufacturer>MAM</SoftwareManufacturer>
                              <SoftwareProduct>Autopart</SoftwareProduct>
                              <SoftwareVersion>17 YL</SoftwareVersion>
                        </OriginatingSoftware>
                        <OrderType Code="PUO"/>
                        <Function Code="FIO"/>
                        <OrderCurrency>
                              <Currency Code="GBP"/>
                        </OrderCurrency>
                        <Checksum>36862</Checksum>
                  </OrderHead>
                  <OrderReferences>
                        <BuyersOrderNumber>AP115502</BuyersOrderNumber>
                  </OrderReferences>
                  <OrderDate>2008-12-04T13:35</OrderDate>
                  <Supplier>
                        <SupplierReferences>
                              <BuyersCodeForSupplier>xxx</BuyersCodeForSupplier>
                        </SupplierReferences>
                        <Party>xxx</Party>
                        <Address>
                              <AddressLine>xxxL</AddressLine>
                              <AddressLine>xxx.</AddressLine>
                              <AddressLine>xxx</AddressLine>
                              <AddressLine>xxx</AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine>xxx</AddressLine>
                        </Address>
                        <Contact>
                              <Name>-</Name>
                              <Department>Sales</Department>
                              <DDI>xxxxx</DDI>
                        </Contact>
                  </Supplier>
                  <Buyer>
                        <BuyerReferences>
                              <SuppliersCodeForBuyer>xxxx</SuppliersCodeForBuyer>
                              <GLN>3UE372961233NR3</GLN>
                        </BuyerReferences>
                        <Party>EU LTD NORWICH 100</Party>
                        <Address>
                              <AddressLine>xxxx</AddressLine>
                              <AddressLine>xxx</AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine>xxxx</AddressLine>
                        </Address>
                        <Contact>
                              <Name>xxx</Name>
                              <Department>Purchasing</Department>
                              <DDI></DDI>
                        </Contact>
                  </Buyer>
                  <Delivery>
                        <DeliverTo>
                              <DeliverToReferences>
                                    <BuyersCodeForDelivery>xxxx</BuyersCodeForDelivery>
                                    <GLN>3xxx</GLN>
                              </DeliverToReferences>
                              <Party>xxxx</Party>
                              <Address>
                                    <AddressLine>xxxx</AddressLine>
                                    <AddressLine>xxxx</AddressLine>
                                    <AddressLine></AddressLine>
                                    <AddressLine></AddressLine>
                                    <AddressLine></AddressLine>
                                    <AddressLine>xxxx</AddressLine>
                              </Address>
                              <Contact>
                                    <Name></Name>
                                    <Department>Purchasing</Department>
                                    <DDI></DDI>
                              </Contact>
                        </DeliverTo>
                  </Delivery>
                  <InvoiceTo>
                        <InvoiceToReferences>
                              <GLN>xxxx</GLN>
                        </InvoiceToReferences>
                        <Party>xxxx</Party>
                        <Address>
                              <AddressLine>xxxx</AddressLine>
                              <AddressLine>NORWICH</AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine>xxxx</AddressLine>
                        </Address>
                        <Contact>
                              <Name>BILLY/MATT</Name>
                              <Department>Purchasing</Department>
                              <DDI></DDI>
                        </Contact>
                  </InvoiceTo>
                  <OrderLine>
                        <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxxx</BuyersProductCode>
                              <Description>xxx</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>3</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>11.96</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>35.88</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                        <LineNumber>2</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxx</BuyersProductCode>
                              <Description>xxxxxxrt List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                        <LineNumber>3</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>Bxxxx</BuyersProductCode>
                              <Description>xxx-</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>17.19</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>17.19</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                        <LineNumber>4</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxxx</BuyersProductCode>
                              <Description>xxxxx</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>40.91</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>40.91</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  
                  
            </Order>
      </body>
</biztalk_1>



**********************************
Class Written so far
**********************************
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;


namespace MAMXml
{
    [XmlRoot("biztalk_1", Namespace = "urn:schemas-biztalk-org:biztalk:biztalk_1")]

    public class biztalk_1
    {
        public body body;
    }
    public class body
    {
        [XmlElement("Order", Namespace = "urn:www.basda.org/schema/eBIS-XML_order_v3.00.xml")]
        public Order Order;
    }

    public class Order
    {
        public OrderReferences OrderReferences;
        private string _OrderDate;
        public Supplier Supplier;
        public Buyer Buyer;
        public Delivery Delivery;
        public InvoiceTo InvoiceTo;

       // public List<OrderLine> OrderLine = new List<OrderLine>();
        [XmlArray("OrderLine"), XmlArrayItem("OrderLine", typeof(OrderLine))]
        public System.Collections.ArrayList OrderLine = new System.Collections.ArrayList();
     
             
        public string OrderDate
        {
            set { _OrderDate = value; }
            get { return _OrderDate; }
        }
    }
    public class OrderReferences
    {
        private string _BuyersOrderNumber;

        public string BuyersOrderNumber
        {
            set { _BuyersOrderNumber = value; }
            get { return _BuyersOrderNumber; }
        }
    }

    public class Supplier
    {
        public SupplierReferences SupplierReferences;
        private string _Party;
        [XmlArray("Address"), XmlArrayItem("AddressLine", typeof(string))]
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
    public class SupplierReferences
    {
        private string _BuyersCodeForSupplier;

        public string BuyersCodeForSupplier
        {
            set { _BuyersCodeForSupplier = value; }
            get { return _BuyersCodeForSupplier; }
        }
    }
    public class Contact
    {
        private string _Name;
        private string _Department;
        private int _DID;

        public string Name
        {
            set { _Name = value; }
            get { return _Name; }
        }
        public string Department
        {
            set { _Department = value; }
            get { return _Department; }
        }
        public int DID
        {
            set { _DID = value; }
            get { return _DID; }
        }

    }

    public class Buyer
    {
        public BuyerReferences BuyerReferences;
        private string _Party;
        [XmlArray("Address"), XmlArrayItem("AddressLine", typeof(string))]
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
    public class BuyerReferences
    {
        private string _SupplierCodeForSupplier;

        public string SupplierCodeForSupplier
        {
            set { _SupplierCodeForSupplier = value; }
            get { return _SupplierCodeForSupplier; }
        }
    }

    public class Delivery
    {
        public DeliverTo DeliverTo;
    }
    public class DeliverTo
    {
        public DelivertoReferences DelivertoReferences;
        private string _Party;
        [XmlArray("Address"), XmlArrayItem("AddressLine", typeof(string))]
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
    public class DelivertoReferences
    {
        private string _BuyersCodeForSupplier;

        public string BuyersCodeForSupplier
        {
            set { _BuyersCodeForSupplier = value; }
            get { return _BuyersCodeForSupplier; }
        }
    }

    public class InvoiceTo
    {
        private string _Party;
        [XmlArray("Address"), XmlArrayItem("AddressLine", typeof(string))]
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
       
    public class OrderLine
    {
        private int _LineNumber;
        private Product _Product;
        private Quantity _Quantity;
       
        public int LineNumber
        {
            set { _LineNumber = value; }
            get { return _LineNumber; }
        }
        public Product Product
        {
            set { _Product = value; }
            get { return _Product; }
        }
        public Quantity Quantity
        {
            set { _Quantity = value; }
            get { return _Quantity; }
        }  
    }
    public class Product
    {
        private string _BuyersProductCode;
        private string _Description;

        public string BuyersProductCode
        {
            set { _BuyersProductCode = value; }
            get { return _BuyersProductCode; }
        }
        public string Description
        {
            set { _Description = value; }
            get { return _Description; }
        }
    }
    public class Quantity
    {
        private int _Amount;
        public int Amount
        {
            set { _Amount = value; }
            get { return _Amount; }
        }
    }
   
   
********************************************

Now it gets confising to deserialize  OrderLine ?
0
 
LVL 11

Expert Comment

by:saragani
Comment Utility
Well, that complicates stuff... There is no name for the class or list that contains the OrderLines
(You just have some OrderLines in the Order, but the name of the list is not mentioned anywhere).

If you had it like that then it would be easy:
<Order>
    <OrderLines>
        <OrderLine>
        </OrderLine>

        <OrderLine>
        </OrderLine>

        <OrderLine>
        </OrderLine>

    </OrderLines>
</Order>

(A list called OderLines contains OrderLines objects).


if the OrderLine array/list is the ONLY list you have in your Order object then you might be able to do this with an Indexer.
I will try to write you an example soon.
0
 
LVL 26

Expert Comment

by:Anurag Thakur
Comment Utility
microsoft gives the following sample to do deserialization of an array
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlarray.aspx
0
Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

 

Author Comment

by:WannabeNerd
Comment Utility
Well saragani you are right it gets a bit complicated.
Here is an examples which i am trying to learn from :
***********************************************************
http://www.developerfusion.com/code/4639/customize-xml-serialization-using-ixmlserializable/

***********************************************************
0
 
LVL 11

Expert Comment

by:saragani
Comment Utility
Well, indexer doesn't help... I tried to do:
public class Order
    {
        public OrderReferences OrderReferences;
        private string _OrderDate;
        public Supplier Supplier;
        public Buyer Buyer;
        public Delivery Delivery;
        public InvoiceTo InvoiceTo;

        private List<OrderLine> OrderLines = new List<OrderLine>();

        public OrderLine this[int index]
        {
            get
            {
                return OrderLines[index];
            }
            set
            {
                OrderLines[index] = value;
            }
        }


        public string OrderDate
        {
            set { _OrderDate = value; }
            get { return _OrderDate; }
        }
    }

(Which in this way you can do Order[5])

I think that you will have to change your XML structure a little or serialize it manualy (which sucks)
0
 

Author Comment

by:WannabeNerd
Comment Utility
Hi,
 I know the XMl structure should be changed but to be honest its not my XML. i have to get it from customers and then read so there lies the problem.
I think i have to serialize it manualy.It sucks but i have to do  it.
I'll have a look but could not find any example at all.
0
 
LVL 11

Expert Comment

by:saragani
Comment Utility
Well, there is another solution which I haven't took under consideration, and just like the other idea with the Indexer, it will work  IF AND ONLY IF the order object contains only one list (Which in this case, list of OrderLine).

The problem that we had in the XML is that there is no list container... There is Order, and then inside it there are OrderLines (Instead of having OrderLines inside some kind of a list inside Order)...

But what if Order will be a list??

What I did is this:

    public class body
    {
        public Order<OrderLine> Order;
    }

    public class Order<T> : List<T>
    {
        public OrderReferences OrderReferences;
        private string _OrderDate;
        public Supplier Supplier;
        public Buyer Buyer;
        public Delivery Delivery;
        public InvoiceTo InvoiceTo;

        public string OrderDate
        {
            set { _OrderDate = value; }
            get { return _OrderDate; }
        }
    }






I have allowed myself to remove the xmlns and the namespace from the XML and classes since my project doesn't contain any name spaces like it.

I've tested it and it works.... The full XML is:

<biztalk_1>
      <header>
            <delivery>
                  <message/>
                  <to>
                        <address/>
                  </to>
                  <from>
                        <address/>
                  </from>
            </delivery>
            <manifest>
                  <document>
                        <name>Order</name>
                        <description>EBis Order</description>
                  </document>
            </manifest>
      </header>
      <body>
            <Order>
                  <OrderHead>
                        <Schema>
                              <Version>3.00</Version>
                        </Schema>
                        <Stylesheet>
                              <StylesheetOwner/>
                              <StylesheetName>eBIS_MAM.xsl</StylesheetName>
                              <Version/>
                              <StylesheetType>xsl</StylesheetType>
                        </Stylesheet>
                        <Parameters>
                              <Language>en_GB</Language>
                              <DecimalSeparator>.</DecimalSeparator>
                              <Precision>20.2</Precision>
                        </Parameters>
                        <OriginatingSoftware>
                              <SoftwareManufacturer>MAM</SoftwareManufacturer>
                              <SoftwareProduct>Autopart</SoftwareProduct>
                              <SoftwareVersion>17 YL</SoftwareVersion>
                        </OriginatingSoftware>
                        <OrderType Code="PUO"/>
                        <Function Code="FIO"/>
                        <OrderCurrency>
                              <Currency Code="GBP"/>
                        </OrderCurrency>
                        <Checksum>36862</Checksum>
                  </OrderHead>
                  <OrderReferences>
                        <BuyersOrderNumber>AP115502</BuyersOrderNumber>
                  </OrderReferences>
                  <OrderDate>2008-12-04T13:35</OrderDate>
                  <Supplier>
                        <SupplierReferences>
                              <BuyersCodeForSupplier>xxx</BuyersCodeForSupplier>
                        </SupplierReferences>
                        <Party>xxx</Party>
                        <Address>
                              <AddressLine>xxxL</AddressLine>
                              <AddressLine>xxx.</AddressLine>
                              <AddressLine>xxx</AddressLine>
                              <AddressLine>xxx</AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine>xxx</AddressLine>
                        </Address>
                        <Contact>
                              <Name>-</Name>
                              <Department>Sales</Department>
                              <DDI>xxxxx</DDI>
                        </Contact>
                  </Supplier>
                  <Buyer>
                        <BuyerReferences>
                              <SuppliersCodeForBuyer>xxxx</SuppliersCodeForBuyer>
                              <GLN>3UE372961233NR3</GLN>
                        </BuyerReferences>
                        <Party>EU LTD NORWICH 100</Party>
                        <Address>
                              <AddressLine>xxxx</AddressLine>
                              <AddressLine>xxx</AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine>xxxx</AddressLine>
                        </Address>
                        <Contact>
                              <Name>xxx</Name>
                              <Department>Purchasing</Department>
                              <DDI></DDI>
                        </Contact>
                  </Buyer>
                  <Delivery>
                        <DeliverTo>
                              <DeliverToReferences>
                                    <BuyersCodeForDelivery>xxxx</BuyersCodeForDelivery>
                                    <GLN>3xxx</GLN>
                              </DeliverToReferences>
                              <Party>xxxx</Party>
                              <Address>
                                    <AddressLine>xxxx</AddressLine>
                                    <AddressLine>xxxx</AddressLine>
                                    <AddressLine></AddressLine>
                                    <AddressLine></AddressLine>
                                    <AddressLine></AddressLine>
                                    <AddressLine>xxxx</AddressLine>
                              </Address>
                              <Contact>
                                    <Name></Name>
                                    <Department>Purchasing</Department>
                                    <DDI></DDI>
                              </Contact>
                        </DeliverTo>
                  </Delivery>
                  <InvoiceTo>
                        <InvoiceToReferences>
                              <GLN>xxxx</GLN>
                        </InvoiceToReferences>
                        <Party>xxxx</Party>
                        <Address>
                              <AddressLine>xxxx</AddressLine>
                              <AddressLine>NORWICH</AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine></AddressLine>
                              <AddressLine>xxxx</AddressLine>
                        </Address>
                        <Contact>
                              <Name>BILLY/MATT</Name>
                              <Department>Purchasing</Department>
                              <DDI></DDI>
                        </Contact>
                  </InvoiceTo>
                  <OrderLine>
                        <LineNumber>1</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxxx</BuyersProductCode>
                              <Description>xxx</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>3</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>11.96</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>35.88</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                        <LineNumber>2</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxx</BuyersProductCode>
                              <Description>xxxxxxrt List</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>25.33</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>25.33</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                        <LineNumber>3</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>Bxxxx</BuyersProductCode>
                              <Description>xxx-</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>17.19</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>17.19</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                  <OrderLine>
                        <LineNumber>4</LineNumber>
                        <Product>
                              <SuppliersProductCode/>
                              <BuyersProductCode>xxxx</BuyersProductCode>
                              <Description>xxxxx</Description>
                        </Product>
                        <Quantity>
                              <Packsize>EACH</Packsize>
                              <Amount>1</Amount>
                        </Quantity>
                        <Price>
                              <UnitPrice>40.91</UnitPrice>
                        </Price>
                        <LineTax>
                              <TaxRate Code="s">15</TaxRate>
                              <TaxValue>0</TaxValue>
                        </LineTax>
                        <LineTotal>40.91</LineTotal>
                        <Delivery>
                              <DeliverTo>
                                    <Party/>
                              </DeliverTo>
                              <PreferredDate>2008-12-05</PreferredDate>
                        </Delivery>
                  </OrderLine>
                 
                 
            </Order>
      </body>
</biztalk_1>



The Classes are:

    public class biztalk_1
    {
        public body body;
    }
    public class body
    {
        public Order<OrderLine> Order;
    }

    public class Order<T> : List<T>
    {
        public OrderReferences OrderReferences;
        private string _OrderDate;
        public Supplier Supplier;
        public Buyer Buyer;
        public Delivery Delivery;
        public InvoiceTo InvoiceTo;

        public string OrderDate
        {
            set { _OrderDate = value; }
            get { return _OrderDate; }
        }
    }

    public class OrderReferences
    {
        private string _BuyersOrderNumber;

        public string BuyersOrderNumber
        {
            set { _BuyersOrderNumber = value; }
            get { return _BuyersOrderNumber; }
        }
    }

    public class Supplier
    {
        public SupplierReferences SupplierReferences;
        private string _Party;
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
    public class SupplierReferences
    {
        private string _BuyersCodeForSupplier;

        public string BuyersCodeForSupplier
        {
            set { _BuyersCodeForSupplier = value; }
            get { return _BuyersCodeForSupplier; }
        }
    }
    public class Contact
    {
        private string _Name;
        private string _Department;
        private int _DID;

        public string Name
        {
            set { _Name = value; }
            get { return _Name; }
        }
        public string Department
        {
            set { _Department = value; }
            get { return _Department; }
        }
        public int DID
        {
            set { _DID = value; }
            get { return _DID; }
        }

    }

    public class Buyer
    {
        public BuyerReferences BuyerReferences;
        private string _Party;
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
    public class BuyerReferences
    {
        private string _SupplierCodeForSupplier;

        public string SupplierCodeForSupplier
        {
            set { _SupplierCodeForSupplier = value; }
            get { return _SupplierCodeForSupplier; }
        }
    }

    public class Delivery
    {
        public DeliverTo DeliverTo;
    }
    public class DeliverTo
    {
        public DelivertoReferences DelivertoReferences;
        private string _Party;
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }
    public class DelivertoReferences
    {
        private string _BuyersCodeForSupplier;

        public string BuyersCodeForSupplier
        {
            set { _BuyersCodeForSupplier = value; }
            get { return _BuyersCodeForSupplier; }
        }
    }

    public class InvoiceTo
    {
        private string _Party;
        public System.Collections.ArrayList Address = new System.Collections.ArrayList();
        public Contact Contact;

        public string Party
        {
            set { _Party = value; }
            get { return _Party; }
        }
    }

    public class OrderLine
    {
        private int _LineNumber;
        private Product _Product;
        private Quantity _Quantity;

        public int LineNumber
        {
            set { _LineNumber = value; }
            get { return _LineNumber; }
        }
        public Product Product
        {
            set { _Product = value; }
            get { return _Product; }
        }
        public Quantity Quantity
        {
            set { _Quantity = value; }
            get { return _Quantity; }
        }
    }
    public class Product
    {
        private string _BuyersProductCode;
        private string _Description;

        public string BuyersProductCode
        {
            set { _BuyersProductCode = value; }
            get { return _BuyersProductCode; }
        }
        public string Description
        {
            set { _Description = value; }
            get { return _Description; }
        }
    }
    public class Quantity
    {
        private int _Amount;
        public int Amount
        {
            set { _Amount = value; }
            get { return _Amount; }
        }
    }




And when I serialize it by:
XmlSerializer xs = new XmlSerializer(typeof(biztalk_1));
            biztalk_1 bt;
            using (FileStream fs = new FileStream(@"c:\1.xml", FileMode.Open))
            {
                bt = (biztalk_1)xs.Deserialize(fs);
            }

I can do:
bt.body.Order[4].LineNumber
(Which Order.Orderline[4].LineNumber)

And I can also do:
bt.body.Order.OrderReferences.BuyersOrderNumber


:-)

0
 
LVL 11

Expert Comment

by:saragani
Comment Utility
Well, I've tested it again and it doesn't work properly.
The items on the list get filled, but all the other data is not... so in this case you will not have OrderDate etc...

I wonder why it does that. Maybe you should not inherit from List<T> but create your own List (by deriving from IEnumerable etc)
0
 

Author Comment

by:WannabeNerd
Comment Utility
0
 

Author Comment

by:WannabeNerd
Comment Utility
i'll also have a look if i can live without OrderData
0
 

Author Comment

by:WannabeNerd
Comment Utility
Nope it does not work. Tried  it and with namespace it gives me errors.
0
 
LVL 11

Expert Comment

by:saragani
Comment Utility
It not just OrderDate which is missing.
It seems that anything that derives from collection (also every class that you make that implements IEnumerable) will only have the elements in the list serialized...


You can use IXmlSerializable, but you will need to implement the serialization manually...
0
 

Accepted Solution

by:
WannabeNerd earned 0 total points
Comment Utility
This is how it is done :
*************************
public class Order
    {
        public OrderReferences OrderReferences;
        private string _OrderDate;
        public Supplier Supplier;
        public Buyer Buyer;
        public Delivery Delivery;
        public InvoiceTo InvoiceTo;



        /// This is very important part
       
         private ArrayList ListOrderLine;

        public Order()
        {
            ListOrderLine = new ArrayList();
        }
        [XmlElement("OrderLine")]
        public OrderLine[] OrderLineArray
        {
            get
            {
                OrderLine[] OrderLineArray = new OrderLine[ListOrderLine.Count];
                ListOrderLine.CopyTo(OrderLineArray);
                return OrderLineArray;
            }
            set
            {
                if (value == null) return;
                OrderLine[] OrderLineArray = (OrderLine[])value;
                ListOrderLine.Clear();
                foreach (OrderLine orderline in OrderLineArray)
                    ListOrderLine.Add(orderline);
            }
        }
        public int AddOrderLine(OrderLine orderline)
        { return ListOrderLine.Add(orderline); }

        /// </summary>

                         
        public string OrderDate
        {
            set { _OrderDate = value; }
            get { return _OrderDate; }
        }
    }
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Image(2) 3 21
Hide Tab Page 3 18
Calling stored proc in EDMX 11 17
fomat Json objects 6 15
We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now