일부 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의.
감사합니다.
sussed 그것은 바보되고있다 – davethecoder
대답을 수락, 다른 사람들도 바보 같은 순간이 있습니다 – sq33G