public class Test { private InnerTest innerTest; private int testNumber; public Test() { this.innerTest = new InnerTest(); this.testNumber = 5; } public int TestNumber1 { get { return this.testNumber; } set { this.testNumber = value;} } public InnerTest InnerTest { get { return this.innerTest; } set { this.innerTest = value;} } } public struct InnerTest { private int number; public InnerTest(int number) { this.number = number; } public int Number{get { return number; }} } [DataMember] public int TestNumber1 { get { return this.testNumber; } set { this.testNumber = value;} } // note **not** a data-member public InnerTest InnerTest { get { return this.innerTest; } set { this.innerTest = value;} } [DataMember] private int InnerTestValue { get {return innerTest.Number;} set {innerTest = new InnerTest(value);} } Test test = new Test { TestNumber1 = 5 }; XmlSerializer xmlSer = new XmlSerializer(typeof(Test)); MemoryStream memStm = new MemoryStream(); xmlSer.Serialize(memStm, test); StreamReader stmR = new StreamReader(memStm); memStm.Position = 0; string output = stmR.ReadToEnd();