我有一个 Web API,我只是想以 XML 格式将一些数据返回给调用客户端。
我不断收到以下错误:
<ExceptionMessage>
Type '<>f__AnonymousType7`9[System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Nullable`1[System.Int32],System.String]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types.
</ExceptionMessage>
这是控制器代码:
public class TribuneShowsController : ApiController
{
private readonly TVDataEntities db;
public TribuneShowsController()
{
db = new TVDataEntities();
db.Configuration.ProxyCreationEnabled = false;
}
public IEnumerable GetTribuneShows(string title = null,
string genre = null,
string showTypeDescription = null,
string directorName = null,
string releaseYear = null)
{
var query = from shows in db.TRIB_Shows
from showTypes in
db.TRIB_LKP_ShowTypes.Where(v => v.ShowTypeCode == shows.ShowTypeCode).DefaultIfEmpty()
select new
{
dataSource = "Tribune",
shows.Title,
EpisodeId = "",
EpisodeTitle = "",
Genre = shows.Category,
showTypes.ShowTypeDescription,
shows.DirectorName,
shows.ReleaseYear,
SeasonEpisode = ""
};
if (title != null)
{
query = query.Where(s => s.Title.Contains(title));
}
if (genre != null)
{
query = query.Where(s => s.Genre.Contains(genre));
}
if (showTypeDescription != null)
{
query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription));
}
if (directorName != null)
{
query = query.Where(s => s.DirectorName.Contains(directorName));
}
if (releaseYear != null)
{
query = query.Where(s => s.ReleaseYear.ToString().Contains(releaseYear));
}
return query.ToList();
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
我的第一个问题是,如何将返回对象(通过 API)默认为 XML?因此,无论何时有人访问该链接,他们都会得到一个 XML。
第二个问题是,如何将上面代码中的匿名类型作为 XML 返回给客户端?