using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Runtime.Serialization;
[DataContract(Name = "foo1", Namespace = "")]
[DataMember(Name = "name", Order = 1)]
public string Name { get; set; }
[DataMember(Name = "id", Order = 2)]
public string Id { get; set; }
public static void Test()
new TestClass().TestDeserialization();
public void TestDeserialization()
var foo1 = "<foo1>\n\t<name>SomeValue</name>\n\t<id>101</id>\n</foo1>";
var foo2 = "<foo2>\n\t<name>SomeOtherValue</name>\n\t<id>205</id>\n</foo2>";
var serializer = new DataContractSerializer(typeof(Foo));
var objFoo1 = (Foo)serializer.ReadObject(XmlReader.Create(new StringReader(foo1)));
objFoo1.Name.Should().Be("SomeValue");
objFoo1.Id.Should().Be("101");
var serializer2 = new DataContractSerializer(typeof(Foo), "foo2", "");
var objFoo2 = (Foo)serializer2.ReadObject(XmlReader.Create(new StringReader(foo2)));
objFoo2.Name.Should().Be("SomeOtherValue");
objFoo2.Id.Should().Be("205");
var foo3xml = "<unknownRoot>\n\t<name>SomeOtherValue</name>\n\t<id>205</id>\n</unknownRoot>";
using (var textReader = new StringReader(foo3xml))
using (var xmlReader = XmlReader.Create(textReader))
if (xmlReader.MoveToContent() != XmlNodeType.Element)
throw new XmlException("No root node found");
var serializer3 = new DataContractSerializer(typeof(Foo), xmlReader.LocalName, xmlReader.NamespaceURI);
var objFoo3 = (Foo)serializer3.ReadObject(xmlReader);
objFoo3.Name.Should().Be("SomeOtherValue");
objFoo3.Id.Should().Be("205");
Console.WriteLine(foo3xml);
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("Failed with unhandled exception: ");