0
我有一個簡單的對象,我試圖使用DataContractSerializer進行序列化。DataContractSerializer後無法訪問元素
在我的單元測試中,我試圖驗證xml是否包含產品/ sku節點的正確值。
我的產品類別:
[DataContract(Namespace = "http://foo.com/catalogue/")
partial class Product
{
[DataMember(Name = "sku")]
public virtual string ProductSKU
{
get { return _productSKU; }
set
{
OnProductSKUChanging();
_productSKU = value;
OnProductSKUChanged();
}
}
}
這裏的方法我測試:
public XDocument GetProductXML(Product product)
{
var serializer = new DataContractSerializer(typeof(Product));
var document = new XDocument();
using (var writer = document.CreateWriter())
{
serializer.WriteObject(writer, product);
writer.Close();
}
return document;
}
這是我的單元測試:
[Test]
public void Can_get_product_xml()
{
// Arrange
var product = new Product {Id = 1, Name = "Foo Balls", ProductSKU = "Foo123"};
var repository = new CatalogueRepository();
var expectedProductSKU = "Foo123";
// Act
var xml = repository.GetProductXML(product);
var actualProductSKU = xml.Element("product").Element("sku").Value;
// Assert
Assert.AreEqual(expectedProductSKU, actualProductSKU);
}
的問題是,我得到一個當我嘗試訪問xml元素時引用空引用,儘管當我設置了一個斷點時,var xml包含:
<product xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://foo.com catalogue/">
<sku>Foo123</sku>
</product>
任何想法爲什麼這不起作用?在將其添加到XDocument之前,是否需要解析序列化的流?
啊,我認爲這可能是與命名空間有關...將嘗試 – autonomatt 2009-12-26 17:19:53
哦,是的,這工作。乾杯馬克! – autonomatt 2009-12-26 17:30:12
太棒了!很高興知道它有幫助。請享用! – 2009-12-26 17:31:00