问题描述
我正在将BigBlueButton API与Asp Net MVC集成在一起。但是我无法从api读取响应xml文件。 这是一个部队模块项目。
我的代码:
public ActionResult GetMeetings()
{
List<AllMeetings> allMeetings = new List<AllMeetings>();
XmlSerializer serializer = new XmlSerializer(typeof(List<AllMeetings>),"response");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://bbb.hsu.ac.ir/bigbluebutton/api/getMeetings?checksum=aca692f682f06312cb43f14564ddf96cb76925ed");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader sr = new StreamReader(dataStream);
List<AllMeetings> allMeeting =(List<AllMeetings>)serializer.Deserialize(sr);
return View(allMeeting);
}
我编写了一个类,以便可以将属性定义为xml元素,并将它们用作可枚举的模型
namespace BBBJavaScriptTest
{
[Serializable]
[XmlType("response")]
public class AllMeetings
{
[XmlElement(ElementName = "meetingName")]
public string meetingName { get; set; }
[XmlElement(ElementName = "meetingID")]
public string meetingID { get; set; }
[XmlElement(ElementName = "createDate")]
public string createDate { get; set; }
[XmlElement(ElementName = "voiceBridge")]
public string voiceBridge { get; set; }
[XmlElement(ElementName = "moderatorPW")]
public string moderatorPW { get; set; }
public AllMeetings()
{
}
}
并且视图部分是Razor View:
@model IEnumerable<AllMeetings>
@{
ViewBag.Title = "GetMeetings";
Layout = null;
}
<h2>GetMeetings</h2>
<table class="table table-bordered">
<tr>
<td>meetingID</td>
<td>meetingName</td>
<td>createDate</td>
<td>voiceBridge</td>
<td>moderatorPW</td>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.meetingID</td>
<td>@item.meetingName</td>
<td>@item.createDate</td>
<td>@item.voiceBridge</td>
<td>@item.moderatorPW</td>
</tr>
}
</table>
响应示例:
<response>
<returncode>SUCCESS</returncode>
<meetings>
<meeting>
<meetingName>****</meetingName>
<meetingID>****</meetingID>
<internalMeetingID>
****
</internalMeetingID>
<createTime>1603543982183</createTime>
<createDate>Sat Oct 24 16:23:02 irsT 2020</createDate>
<voiceBridge>78409</voiceBridge>
<dialNumber>****</dialNumber>
<attendeePW>ap</attendeePW>
<moderatorPW>mp</moderatorPW>
<running>true</running>
<duration>400</duration>
<hasUserJoined>true</hasUserJoined>
<recording>false</recording>
<hasBeenForciblyEnded>false</hasBeenForciblyEnded>
<startTime>1603543982435</startTime>
<endTime>0</endTime>
<participantCount>1</participantCount>
<listenerCount>1</listenerCount>
<voiceParticipantCount>0</voiceParticipantCount>
<videoCount>0</videoCount>
<maxUsers>0</maxUsers>
<moderatorCount>1</moderatorCount>
<attendees>
<attendee>
<userID>****</userID>
<fullName>****</fullName>
<role>MODERATOR</role>
<isPresenter>true</isPresenter>
<isListeningOnly>true</isListeningOnly>
<hasJoinedVoice>false</hasJoinedVoice>
<hasVideo>false</hasVideo>
<clientType>HTML5</clientType>
</attendee>
</attendees>
<Metadata> </Metadata>
<isBreakout>false</isBreakout>
</meeting>
</meetings>
</response>
解决方法
我解决了问题,这是解决方案:
XDocument doc = XDocument.Load(sr);
List<AllMeetings> meetings = new List<AllMeetings>();
foreach (XElement element in doc.Element("response").Elements("meetings").Elements("meeting"))
{
AllMeetings newMeeting = new AllMeetings();
newMeeting.meetingName = (string)element.Element("meetingName");
meetings.Add(newMeeting);
}
return View(meetings);