Accepted answer

You can't serialize with LINQ. You can use XmlSerializer.

  XmlSerializer serializer = new XmlSerializer(typeof(College));

  // Create a FileStream to write with.
  Stream writer = new FileStream(filename, FileMode.Create);
  // Serialize the object, and close the TextWriter
  serializer.Serialize(writer, i);


you have to use the XML serialization

static public void SerializeToXML(College college)
  XmlSerializer serializer = new XmlSerializer(typeof(college));
  TextWriter textWriter = new StreamWriter(@"C:\college.xml");
  serializer.Serialize(textWriter, college);


You can't use LINQ. Look at the below code as an example.

// This is the test class we want to 
// serialize:
public class TestClass
    private string someString;
    public string SomeString
        get { return someString; }
        set { someString = value; }

    private List<string> settings = new List<string>();
    public List<string> Settings
        get { return settings; }
        set { settings = value; }

    // These will be ignored
    private int willBeIgnored1 = 1;
    private int willBeIgnored2 = 1;


// Example code

// This example requires:
// using System.Xml.Serialization;
// using System.IO;

// Create a new instance of the test class
TestClass TestObj = new TestClass();

// Set some dummy values
TestObj.SomeString = "foo";


#region Save the object

// Create a new XmlSerializer instance with the type of the test class
XmlSerializer SerializerObj = new XmlSerializer(typeof(TestClass));

// Create a new file stream to write the serialized object to a file
TextWriter WriteFileStream = new StreamWriter(@"C:\test.xml");
SerializerObj.Serialize(WriteFileStream, TestObj);

// Cleanup


The test.xml file will look like this:

<?xml version="1.0"?>
<TestClass xmlns:xsi="" xmlns:xsd="">

#region Load the object

// Create a new file stream for reading the XML file
FileStream ReadFileStream = new FileStream(@"C:\test.xml", FileMode.Open, FileAccess.Read, FileShare.Read);

// Load the object saved above by using the Deserialize function
TestClass LoadedObj = (TestClass)SerializerObj.Deserialize(ReadFileStream);

// Cleanup


// Test the new loaded object:

foreach (string Setting in LoadedObj.Settings)


I'm not sure if that is what you want, but to make an XML-Document out of this:

College coll = ...
XDocument doc = new XDocument(
  new XElement("College",
    new XElement("Name", coll.Name),
    new XElement("Address", coll.Address),
    new XElement("Persons", coll.Persons.Select(p =>
      new XElement("Person",
        new XElement("Gender", p.Gender),
        new XElement("City", p.City)


Not sure why people are saying you can't serialize/deserialize with LINQ. Custom serialization is still serialization:

public static College Deserialize(XElement collegeXML)
    return new College()
               Name = (string)collegeXML.Element("Name"),
               Address = (string)collegeXML.Element("Address"),
               Persons = (from personXML in collegeXML.Element("Persons").Elements("Person")
                          select Person.Deserialize(personXML)).ToList()

public static XElement Serialize(College college)
    return new XElement("College",
               new XElement("Name", college.Name),
               new XElement("Address", college.Address)
               new XElement("Persons", (from p in college.Persons
                                        select Person.Serialize(p)).ToList()));

Note, this probably isn't the greatest approach, but it's answering the question at least.


You can use that if you needed XDocument object after serialization

DataClass dc = new DataClass();

XmlSerializer x = new XmlSerializer(typeof(DataClass));
MemoryStream ms = new MemoryStream();
x.Serialize(ms, dc);
ms.Seek(0, 0);

XDocument xDocument = XDocument.Load(ms); // Here it is!

Related Articles