c#如何返回用户定义类型的空对象?

时间:2013-11-25 12:16:49

标签: c# xml linq

我有一个将XML反序列化为特定用户定义类型(Product Class)的方法。

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;
        }

当从DB中检索到值时,我的输入XML将如下所示:

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

如果满足条件,如何返回空对象?

如果一切顺利的话。它将为我返回一个具有所有属性的产品类。

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

如何使用LINQ仅返回前三个属性?像这样:

{ID, ModelNumber, SKU}

我在考虑使用动态对象。有没有其他方法来实现这一目标?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

使用Linq构建匿名实例:

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

但是,在此示例中,不能 return anonResults。匿名类仅在首次声明它们的范围内有效。

如果真的想要动态地执行此操作,javascript样式,我会使用ExpandoObject

我的建议只是返回完整的对象。如果您想限制访问Att4Att5,请考虑在Product上实施一个仅声明IDModelNumber的界面和SKU

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; }
}