2015-01-30 3 views
1

У меня есть простой службы WCFWCF, XML десериализации

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    string GetData(ShoppingCart value); 
} 

public class ShoppingCart 
{ 
    public string name; 
    [XmlElement("ShoppingCartItem")] 
    public ShoppingCartItem[] ShoppingCartItems; 
} 

public class ShoppingCartItem 
{ 
    public string Description; 
} 

и простой тест консоли. Когда я добавляю ссылку на службу в тестовую консоль, класс My ShoppingCart приходит в файл reference.cs TestConsole. Так что я могу написать, как это на проекте TestConsole:

static void Main(string[] args) 
{ 
    ShoppingCart body = new ShoppingCart(); 
    FileStream myFileStream = new FileStream(@"C:\Resources\Xmls\New Folder\shoppingCart.xml", FileMode.Open); 
    XmlSerializer mySerializer = new XmlSerializer(typeof(ShoppingCart)); 
    ShoppingCart cart = (ShoppingCart)mySerializer.Deserialize(myFileStream);  
} 

Мой файл shoppingCart.xml как это:

<?xml version="1.0"?> 
<ShoppingCart> 
    <name>test</name> 
    <ShoppingCartItem> 
    <Description>XBox 360</Description> 
    </ShoppingCartItem> 
    <ShoppingCartItem> 
    <Description>Cell Phone</Description> 
    </ShoppingCartItem> 
</ShoppingCart> 

Итак, я жду, что когда код приходит

ShoppingCart cart = (ShoppingCart)mySerializer.Deserialize(myFileStream); 

линии, должно быть два элемента. Но, похоже, это:

enter image description here

Не могли бы вы объяснить, почему мой список не заполнен?

ответ

2

Вам нужно добавить атрибут XmlElement так:

public class ShoppingCart 
{ 
    [XmlElement("ShoppingCartItem")] 
    public ShoppingCartItem[] ShoppingCartItems; 
} 

Если это возможно изменить XML-файл в этой структуре и удалить атрибут XmlElement, что альтернатива

<ShoppingCart> 
    <name>test</name> 
    <ShoppingCartItems> 
    <ShoppingCartItem> 
    <Description>XBox 360</Description> 
    </ShoppingCartItem> 
    <ShoppingCartItem> 
    <Description>Cell Phone</Description> 
    </ShoppingCartItem> 
    </ShoppingCartItems> 
</ShoppingCart> 
+0

спасибо, но не помогло –

+0

Вы уверены? Я его запустил! –

+0

Daniel, он работает, если я запускаю все это в простом консольном проекте. Но в моем случае мой реальный объект (Корзина) находится в проекте WCF и переходит на тестовую консоль, когда я добавляю ссылку на службу в свой тестовый проект. На этот раз это не сработает. Не могли бы вы попробовать этот случай. Спасибо за вашу помощь. –

Смежные вопросы