2011-11-19 1 views
1

일부 XML을 DE 직렬화하기를 원하므로 XSD를 사용하여 XML을 클래스로 변환했습니다.asp.net MVC는 XML의 역 직렬화에 사용 된 클래스의 속성을 볼 수 없습니다.

using System.Xml.Serialization; 

namespace Testing.Models 
{ 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] 
[System.SerializableAttribute] 
[System.Diagnostics.DebuggerStepThroughAttribute] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[XmlTypeAttribute(AnonymousType = true)] 
[XmlRootAttribute(Namespace = "", IsNullable = false)] 
public class TradeDoublerProducts 
{ 
    private TradeDoublersProductsProduct[] itemsField; 

    [XmlElementAttribute("product", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public TradeDoublersProductsProduct[] Items { get; set; } 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")] 
[System.SerializableAttribute] 
[System.Diagnostics.DebuggerStepThroughAttribute] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[XmlTypeAttribute(AnonymousType = true)] 
public class TradeDoublersProductsProduct 
{ 
    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string name { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string productUrl { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string imageUrl { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string description { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string price { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string TDProductId { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string TDCategoryID { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string sku { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string shortDescription { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string promoText { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string previousPrice { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string shippingCost { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string weight { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string size { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string brand { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string model { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string condition { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string mpn { get; set; } 

    [XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string techSpecs { get; set; } 

} 

}

이 모두 잘 구축하고, 잘 보이는, 그러나 나는 바로 여기 일을하고 있다고 생각하지 않습니다

public class ProcessTradeDoubler 
{ 

    public void ProcessMyFeed(int feedId) 
    { 
     //TODO read XML data in from specified url matching id sent 

     ProcessXml("data from url"); 
    } 

    private static void ProcessXml(string myXml) 
    { 
     var ser = new XmlSerializer(typeof(TradeDoublerProducts)); 
     TradeDoublerProducts tradeDoublerProducts; 
     using (XmlReader reader = XmlReader.Create(myXml)) 
     { 
      tradeDoublerProducts = (TradeDoublerProducts)ser.Deserialize(reader); 
     } 
     AddModelToProducts((IEnumerable<TradeDoublerProducts>) tradeDoublerProducts); 
    } 

    private static void AddModelToProducts(IEnumerable<TradeDoublerProducts> model) 
    { 
     // loop through model and add items to database 
     foreach (var p in model) 
     { 
      // this does not work, there is no properties inside Items p.Items.name; 
     } 

    } 

} 

내가 내 foreach는 내부 속성을 기대 Model.item 모델에 대한 모델 하지만 아무 것도 없습니다. XML 또는이 파일을 읽는 지 여부를 테스트하지 않는다는 점에 유의하십시오. 이것은 순수한 코드이며 속성에 액세스 할 수 있어야한다는 사실입니다. 일단 내가 테스트에 넣어 XML의.

감사합니다.

+0

sussed 그것은 바보되고있다 – davethecoder

+0

대답을 수락, 다른 사람들도 바보 같은 순간이 있습니다 – sq33G

답변

1

항목은 항목의 배열입니다. 그들에 대한 Foreach는 각 항목의 속성을 찾아야합니다.

읽어야합니다 :

var ser = new XmlSerializer(typeof(TradeDoublerProducts)); 
     TradeDoublerProducts tradeDoublerProducts; 
     using (XmlReader reader = XmlReader.Create(myXml)) 
     { 
      tradeDoublerProducts = (TradeDoublerProducts) ser.Deserialize(reader); 
     } 

     IEnumerable<TradeDoublersProductsProduct> model = tradeDoublerProducts.Items; 

     AddModelToProducts(model); 

문헌 실제 사실에 tradeDoublerProducts.items가 열거 할 때 내가 열거 가능한 tradeDoublerProducts을하려고했던 지적

+0

답변을 주셔서 감사합니다 sdo 내가 이것을 기각 수 – davethecoder

0

수정 내 실행 끝이었다 항목 i가 넘어 갔어야합니다. 위의 코드는 훌륭하게 작동합니다.

관련 문제