2010-07-01 84 views
4

我正在构建一个Web服务以传回(艺术家)对象列表。艺术家对象的内部有一个(专辑)对象列表。在Album对象内部有一个歌曲列表。C#.NET Web服务并返回具有子对象列表的子对象列表

所以我基本上是在建一个大的父母孩子的音乐树。

我的问题是,如何使用SOAP传递此?

什么是最好的使用方法。

现在我得到的是

<Artist> 
    <Name>string</Name> 
    <Albums> 
     <AlbumName>string</AlbumName> 
     <Album xsi:nil="true" /> 
    <Album xsi:nil="true" /> 
    </Albums> 
    <Albums> 
     <AlbumName>string</AlbumName> 
     <Album xsi:nil="true" /> 
     <Album xsi:nil="true" /> 
    </Albums> 
</Artist> 

它打破了在专辑,但它显示我已经保存了两张专辑。

任何建议,将不胜感激!

+0

您使用的是什么样的列表?艺术家,专辑和歌曲是否相同 – A9S6 2010-07-01 04:53:38

+0

我最终从Web服务调用返回列表。 艺术家包含列表和专辑包含列表。 我试图做泛型列表但没有奏效。 – sdmiller 2010-07-01 04:59:35

回答

7

好消息是,.NET Web服务将为您处理XML。你所要做的就是将返回类型声明为List<Artist>或类似的。 Web服务将负责将您的对象序列化为XML。目前还不清楚你是否在自己的XML上。

您粘贴的XML看起来像来自WSDL。

在Visual Studio中运行您的项目,然后浏览到Web服务.asmx页面。你会发现这样的事情。

要使用HTTP POST协议测试操作,请单击“调用”按钮。 alt text

单击该按钮以使您的方法运行。

也许试试这个简单的测试WebMethod如果你自己的没有按照你的预期工作: The result will be this XML doc

[WebMethod] 
    public List<Artist> ListAllArtists() 
    { 
     List<Artist> all = new List<Artist>(); 
     Album one = new Album { Name = "hi", SongNames = new List<string> { "foo", "bar", "baz" } }; 
     Album two = new Album { Name = "salut", SongNames = new List<string> { "green", "orange", "red" } }; 
     Album three = new Album { Name = "hey", SongNames = new List<string> { "brown", "pink", "blue" } }; 
     Album four = new Album { Name = "hello", SongNames = new List<string> { "apple", "orange", "pear" } }; 

     all.Add(new Artist { Albums = new List<Album> { one }, Name = "Mr Guy" }); 
     all.Add(new Artist { Albums = new List<Album> { two }, Name = "Mr Buddy" }); 
     all.Add(new Artist { Albums = new List<Album> { three, four }, Name = "Mr Friend" }); 

     return all;   
    } 

public class Artist 
{ 
    public List<Album> Albums; 
    public string Name; 
} 

public class Album 
{ 
    public string Name; 
    public List<string> SongNames; 
} 
+0

我是definitley,不是试图扮演我自己的XML角色。我从.asmx页面复制了代码 – sdmiller 2010-07-01 05:20:43

+1

谢谢......我其实非常接近! – sdmiller 2010-07-01 05:24:59

+0

即使我有一个类似的Web服务,我想知道如何在Windows窗体应用程序中使用它。我怎么做? – Arti 2014-06-28 05:51:48

2

事情是这样的:

[DataContract] 
class Artist 
{ 
    ..... 
    [DataMember] 
    public List<Album> Albums; 
    ..... 
} 

[DataContract] 
class Album 
{ 
    ..... 
    int ID; 
    ..... 
    [DataMember] 
    public List<Song> Songs; 
    ..... 
} 

[DataContract] 
class Song 
{ 
    ..... 
    int ID; 
    ..... 
    [DataMember] 
    public string Title; 
    ..... 
} 

注:这只是说明如何让你的对象序列化。修改它以使用属性,而不是公共字段等...

您只需要实现WCF服务和使用List<Artist>

相关问题