Here is the entire code for my class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml.Linq;
namespace SharpDIC.Entities
{
/// <summary>
/// Represents a forum on the Dream.In.Code website.
/// </summary>
public class Forum
{
//Forum information is given by this XML call:
//http://www.dreamincode.net/forums/xml.php?showforum=NUMBER_GOES_HERE
public string Name { get; set; }
public string ID { get; set; }
public string URL { get; set; }
public List<Subforum> Subforums { get; set; }
/// <summary>
/// Load a forum by providing an ID.
/// </summary>
/// <param name="id">A forum's individual ID number.</param>
public Forum(string ID)
{
WebClient webClient = new WebClient();
string htmlSource = webClient.DownloadString(new Uri(String.Format("http://www.dreamincode.net/forums/xml.php?showforum={0}", ID)));
XDocument xml = XDocument.Parse(htmlSource);
var forumXML = xml.Element("ipb").Element("forum");
//Load general profile information.
this.Name = forumXML.Element("name").Value;
this.ID = forumXML.Element("id").Value;
this.URL= forumXML.Element("url").Value;
//Load subforums.
var subforumsXML = xml.Element("ipb").Element("forum").Element("subforums");
this.Subforums = (from forum in subforumsXML.Descendants("forum")
select new Subforum()
{
ID = forum.Element("id").Value,
Name = forum.Element("name").Value,
URL = forum.Element("url").Value,
Description = forum.Element("description").Value,
Type = forum.Element("type").Value,
TopicCount = forum.Element("topics").Value,
ReplyCount = forum.Element("replies").Value,
LastPost = new LastPost()
{
Date = forum.Element("lastpost").Element("date").Value,
Name = forum.Element("lastpost").Element("name").Value,
ID = forum.Element("lastpost").Element("id").Value,
URL = forum.Element("lastpost").Element("url").Value,
UserWhoPosted = new Friend()
{
ID = forum.Element("lastpost").Element("user").Element("id").Value,
Name = forum.Element("lastpost").Element("user").Element("name").Value,
Url = forum.Element("lastpost").Element("user").Element("url").Value,
Photo = forum.Element("lastpost").Element("user").Element("photo").Value,
}
}
}).ToList();
}
}
}
Basically what it does is parse the information from the returned xml of this address:
http://www.dreamincode.net/forums/xml.php?showforum=1
Here's how I'm running this code:
SharpDIC.Entities.Forum forum = new SharpDIC.Entities.Forum("1");
Console.WriteLine(forum.Name);
Console.WriteLine(forum.URL);
Console.WriteLine(forum.ID);
Console.WriteLine(forum.Subforums[0].LastPost.UserWhoPosted.Name);
Console.ReadLine();
I'm getting an exception on the entire load subforums block; any suggestions?
NullReferenceException was not handled. Object reference not set to an instance of an object.