2013-11-25 60 views
0

我有一種將XML反序列化爲特定用戶定義類型(Product Class)的方法。c#如何返回用戶定義類型的空對象?

public Class Product 
{ 
    public int ID{ get; set; } 
    public string ModelNumber { get; set; } 
    public string SKU { get; set; } 
    public string Att4 { get; set; } 
    public string Att5 { get; set; } 
} 

該方法將接受XML對象並讀取它的屬性並返回一個產品類。當XML爲空時,我有一個條件我想返回一個像這樣的空對象{}。這裏是我的反序列化方法:

 public static Product DeserializeXmlAsParentProduct(object xml) 
     { 
      if (xml == DBNull.Value) 
       return // I want to return {}; 
      var doc = XDocument.Parse(xml.ToString()); 
      var product = doc.Descendants("row").Select(pd => new Product 
      { 
       ID = GetValue<int>(pd.Element("ID")), 
       ModelNumber = GetValue<string>(pd.Element("ModelNumber")), 
       SKU = GetValue<string>(pd.Element("SKU")) 
      }) 
      .ToList().FirstOrDefault(); 
      return product; 
     } 

我在放XML將看起來像這樣當值從DB中檢索:

<root> 
<row> 
    <ID>8</ID> 
    <ModelNumber>GT</ModelNumber> 
    <SKU>UR</SKU> 
<row/> 
</root> 

我怎樣才能返回空對象,如果條件得到滿足?

另外如果一切順利。它會爲我返回一個包含所有屬性的產品類。

{ID, ModelNumber, SKU, Att4, Att5}` 

如何使用LINQ僅返回前三個屬性?像這樣:

{ID, ModelNumber, SKU} 

我正在考慮使用動態對象。有沒有其他方法可以實現這一目標?

任何幫助表示讚賞。

+0

如果你正在做對象序列化的一個很大的問題,我建議使用這種方法的HTTP ://msdn.microsoft.com/en-us/library/tz8csy73%28v=vs.110%29.aspx – Gusdor

+0

此外,我不禁質疑存儲在數據庫中的值爲xml的智慧。 – Gusdor

+0

實際上,我不是將數據以DB的形式存儲在數據庫中,但是我將它們作爲XML檢索。我正在使用這個SQL Sever選項:SELECT P.ID,P.ModelNumber,P.SKU FOR XML RAW,ELEMENTS,ROOT('root')。 – user123456

回答

2

使用LINQ構建匿名實例:

var anonResults = list.Select(p => new {p.ID, p.ModelNumber, p.SKU }); 

然而,在這個例子中,你不能returnanonResults。匿名類僅在其首次聲明的範圍內有效。

如果你真的想這樣做動態,JavaScript的風格,我會用ExpandoObject

我的建議是隻返回完整的對象。如果你想限制訪問Att4Att5,考慮Product只有聲明IDModelNumberSKU實現一個接口:

public interface IProduct 
{ 
    int ID{ get; set; } 
    string ModelNumber { get; set; } 
    string SKU { get; set; } 
} 

public Class Product : IProduct 
{ 
    public int ID{ get; set; } 
    public string ModelNumber { get; set; } 
    public string SKU { get; set; } 
    public string Att4 { get; set; } 
    public string Att5 { get; set; } 
} 
+0

謝謝你的回答。 – user123456

相關問題