2016-04-13 24 views
0

Web hizmetinden yanıt almayı deniyorum.XmlSerializer.Deserialize() null değerini döndürür ve hata atar

Tepki:

<?xml version="1.0" encoding="UTF-8"?> 
    <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <currency> 
     <id><![CDATA[1]]></id> 
     <name><![CDATA[Złoty]]></name> 
     <iso_code><![CDATA[PLN]]></iso_code> 
     <iso_code_num><![CDATA[985]]></iso_code_num> 
     <blank><![CDATA[1]]></blank> 
     <sign><![CDATA[zł]]></sign> 
     <format><![CDATA[2]]></format> 
     <decimals><![CDATA[1]]></decimals> 
     <conversion_rate><![CDATA[1.000000]]></conversion_rate> 
     <deleted><![CDATA[0]]></deleted> 
     <active><![CDATA[1]]></active> 
    </currency> 
    </prestashop> 

Benim sınıf kodu:

public class prestashop 
{ 
    Currency currency; 
} 

public class Currency 
{ 
    public int id; 
    public string name; 
    public string iso_code; 
    public int iso_code_num; 
    public int blank; 
    public string sign; 
    public int format; 
    public int decimals; 
    public float conversion_rate; 
    public bool deleted; 
    public bool active; 
} 

Ve nihayet bölüm I serisini çalıştığınızda: Ben kodu çalıştırdığınızda

Prestashop_WebClient client = new Prestashop_WebClient(); 
prestashop objpresta = new prestashop(); 
StreamReader strumien = client.ReadRecord("currencies", "1"); 
XmlSerializer ser = new XmlSerializer(typeof(prestashop)); 
objpresta = (prestashop)ser.Deserialize(strumien); 
strumien.Close(); 

, nesne objpresta null seri hale getirildikten sonra hata yok.

Herhangi bir yardım için çok minnettar olurum.

+0

Bir yanıt değil ama akışı el ile kapatmak yerine 'using' deyimini kullanmalısınız. –

cevap

0

bu deneyin .....

usings .....

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 
using System.Xml; 
using System.Xml.Serialization; 

Sınıflar .....

[XmlRoot(ElementName = "currency")] 
public class Currency 
{ 
    [XmlElement(ElementName = "id")] 
    public string Id { get; set; } 
    [XmlElement(ElementName = "name")] 
    public string Name { get; set; } 
    [XmlElement(ElementName = "iso_code")] 
    public string Iso_code { get; set; } 
    [XmlElement(ElementName = "iso_code_num")] 
    public string Iso_code_num { get; set; } 
    [XmlElement(ElementName = "blank")] 
    public string Blank { get; set; } 
    [XmlElement(ElementName = "sign")] 
    public string Sign { get; set; } 
    [XmlElement(ElementName = "format")] 
    public string Format { get; set; } 
    [XmlElement(ElementName = "decimals")] 
    public string Decimals { get; set; } 
    [XmlElement(ElementName = "conversion_rate")] 
    public string Conversion_rate { get; set; } 
    [XmlElement(ElementName = "deleted")] 
    public string Deleted { get; set; } 
    [XmlElement(ElementName = "active")] 
    public string Active { get; set; } 
} 

[XmlRoot(ElementName = "prestashop")] 
public class Prestashop 
{ 
    [XmlElement(ElementName = "currency")] 
    public Currency Currency { get; set; } 
    [XmlAttribute(AttributeName = "xlink", Namespace = "http://www.w3.org/2000/xmlns/")] 
    public string Xlink { get; set; } 
} 

Kod .....

 string strXML = File.ReadAllText("xml.xml"); 
     byte[] bufXML = ASCIIEncoding.UTF8.GetBytes(strXML); 
     MemoryStream ms1 = new MemoryStream(bufXML); 

     // Deserialize to object 
     XmlSerializer serializer = new XmlSerializer(typeof(Prestashop)); 
     try 
     { 
      using (XmlReader reader = new XmlTextReader(ms1)) 
      { 
       Prestashop deserializedXML = (Prestashop)serializer.Deserialize(reader); 

      }// put a break point here and mouse-over Label1Text and Label2Text …. 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 

XML'iniz

<?xml version="1.0" encoding="UTF-8"?> 
    <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <currency> 
     <id><![CDATA[1]]></id> 
     <name><![CDATA[Złoty]]></name> 
     <iso_code><![CDATA[PLN]]></iso_code> 
     <iso_code_num><![CDATA[985]]></iso_code_num> 
     <blank><![CDATA[1]]></blank> 
     <sign><![CDATA[zł]]></sign> 
     <format><![CDATA[2]]></format> 
     <decimals><![CDATA[1]]></decimals> 
     <conversion_rate><![CDATA[1.000000]]></conversion_rate> 
     <deleted><![CDATA[0]]></deleted> 
     <active><![CDATA[1]]></active> 
    </currency> 
    </prestashop> 

XML'inizi xml.xml adlı uygulama oluşturma klasöründeki bir dosyadan bir dizeye okuyorum ... XML dizesini başka bir yerden almanız veya xml.xml dosyasını oluşturmanız ve kaydetmeniz gerekir. Yukarıdaki kod için XML kodunuzu

+0

Teşekkürler - çalıştı :-) – Mordgar

0

Tüm özellikleri tam olarak XML öğeleri gibi yazıyorsunuz, bu nedenle her özellik için [XmlElement] eklemeniz gerekmez. Ama bence

[XmlRoot("currency")] 
public class Currency 
... 
İlgili konular