Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,4 @@
public record LibraryRecord()
{
public List<BookRecord> Books { get; init; } = new();
private LibraryRecord(List<BookRecord> books) : this()
{
Books = books;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Xml.Serialization;

namespace XMLDeserializationInCsharp;

public static class PersonSerializer
{
private static readonly XmlSerializer _serializer =
new(typeof(Person), new XmlRootAttribute("Contact"));

public static Person? Deserialize(string xml)
{
using var reader = new StringReader(xml);

return (Person?)_serializer.Deserialize(reader);
}
}
Original file line number Diff line number Diff line change
@@ -1,96 +1,65 @@
using System.Xml.Serialization;
using static System.Reflection.Metadata.BlobBuilder;
using System.Xml.Serialization;
using XMLDeserializationInCsharp;

namespace XMLDeserializationInCsharp
{
public class Program
{
static void Main(string[] args)
{
var xmlData2 = """<PersonRecord> <Name>John Doe</Name> <Age>30</Age> </PersonRecord>"""; var person2 = DeserializeXmlData<PersonRecord>(xmlData2); Console.WriteLine($"Name: {person2.Name}, Age: {person2.Age}");

var xmlData = """
<Person>
<Name>John Doe</Name>
<Age>30</Age>
</Person>
""";

var person = DeserializeXmlData<Person>(xmlData);
if (person != null)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}

var complexXML = """
<Library>
<Books>
<Book>
<Title> Book 1 </Title>
<Author> Author 1 </Author>
</Book>
<Book>
<Title> Book 2 </Title>
<Author> Author 2 </Author>
</Book>
</Books>
</Library>
""";
var personSerializer = new XmlSerializer(typeof(Person));

var library = DeserializeXmlData<Library>(complexXML);
if (library != null)
{
foreach (Book book in library.Books)
{
Console.WriteLine($"Title: {book.Title}, Author: {book.Author}");
}
}
using (var reader = new StreamReader("person.xml"))
{
var person = (Person?)personSerializer.Deserialize(reader);
if (person != null)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}

//Simple Deserialization
var personXML = """
<PersonRecord>
<Name>John Wick</Name>
<Age>35</Age>
</PersonRecord>
""";
var personRecord = DeserializeXmlData<PersonRecord>(personXML);
if (personRecord != null)
{
Console.WriteLine($"Name: {personRecord.Name}, Age: {personRecord.Age}");
}
var librarySerializer = new XmlSerializer(typeof(Library));

//Complex Deserialization
var libraryXML = """
<LibraryRecord>
<Books>
<BookRecord>
<Title>Book 3</Title>
<Author>Author 3</Author>
</BookRecord>
<BookRecord>
<Title>Book 4</Title>
<Author>Author 4</Author>
</BookRecord>
</Books>
</LibraryRecord>
""";
using (var reader = new StreamReader("library.xml"))
{
var library = (Library?)librarySerializer.Deserialize(reader);
if (library != null)
{
foreach (Book book in library.Books)
{
Console.WriteLine($"Title: {book.Title}, Author: {book.Author}");
}
}
}

var libraryRecord = DeserializeXmlData<LibraryRecord>(libraryXML);
if (libraryRecord != null)
{
foreach (BookRecord book in libraryRecord.Books)
{
Console.WriteLine($"Title: {book.Title}, Author: {book.Author}");
}
}
}
//Simple Deserialization
var personXML = """
<PersonRecord>
<Name>John Wick</Name>
<Age>35</Age>
</PersonRecord>
""";
var personRecord = XmlDeserializer.DeserializeXmlData<PersonRecord>(personXML);
if (personRecord != null)
{
Console.WriteLine($"Name: {personRecord.Name}, Age: {personRecord.Age}");
}

public static T? DeserializeXmlData<T>(string xmlData)
{
var serializer = new XmlSerializer(typeof(T));
using var reader = new StringReader(xmlData);
//Complex Deserialization
var libraryXML = """
<LibraryRecord>
<Books>
<BookRecord>
<Title>Book 3</Title>
<Author>Author 3</Author>
</BookRecord>
<BookRecord>
<Title>Book 4</Title>
<Author>Author 4</Author>
</BookRecord>
</Books>
</LibraryRecord>
""";

return (T?)serializer.Deserialize(reader);
}
}
}
var libraryRecord = XmlDeserializer.DeserializeXmlData<LibraryRecord>(libraryXML);
if (libraryRecord != null)
{
foreach (BookRecord book in libraryRecord.Books)
{
Console.WriteLine($"Title: {book.Title}, Author: {book.Author}");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Xml.Serialization;

namespace XMLDeserializationInCsharp;

public static class XmlDeserializer
{
public static T? DeserializeXmlData<T>(string xmlData)
{
var serializer = new XmlSerializer(typeof(T));
using var reader = new StringReader(xmlData);

return (T?)serializer.Deserialize(reader);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void WhenDeserializingXmlData_ThenReturnExpectedPerson()
""";
var expectedPerson = new Person { Name = "Jane Smith", Age = 25 };

var actualPerson = Program.DeserializeXmlData<Person>(xmlData);
var actualPerson = XmlDeserializer.DeserializeXmlData<Person>(xmlData);

Assert.IsNotNull(actualPerson);
Assert.AreEqual(expectedPerson.Name, actualPerson.Name);
Expand All @@ -42,7 +42,7 @@ public void WhenDeserializingcomplexXML_ThenReturnBooks()
</Library>
""";

var library = Program.DeserializeXmlData<Library>(complexXML);
var library = XmlDeserializer.DeserializeXmlData<Library>(complexXML);

Assert.IsNotNull(library);
Assert.IsNotNull(library.Books);
Expand All @@ -67,7 +67,7 @@ public void WhenDeserializingXmlData_ThenReturnPersonrecord()
""";
var expectedPerson = new PersonRecord { Name = "John Wick", Age = 35 };

var actualPerson = Program.DeserializeXmlData<PersonRecord>(personXML);
var actualPerson = XmlDeserializer.DeserializeXmlData<PersonRecord>(personXML);

Assert.IsNotNull(actualPerson);
Assert.AreEqual(expectedPerson.Name, actualPerson.Name);
Expand All @@ -93,7 +93,7 @@ public void WhenDeserializingXmlData_ThenReturnBooks()
</LibraryRecord>
""";

var library = Program.DeserializeXmlData<LibraryRecord>(libraryXML);
var library = XmlDeserializer.DeserializeXmlData<LibraryRecord>(libraryXML);

Assert.IsNotNull(library);
Assert.IsNotNull(library.Books);
Expand All @@ -105,5 +105,25 @@ public void WhenDeserializingXmlData_ThenReturnBooks()
Assert.AreEqual("Keanu Reeves", library.Books[1].Title);
Assert.AreEqual("BRZRKR", library.Books[1].Author);
}

[TestMethod]
public void WhenDeserializingWithCachedSerializer_ThenReturnPerson()
{
var contactXML = """
<Contact>
<Name>Jane Smith</Name>
<Age>25</Age>
</Contact>
""";

var first = PersonSerializer.Deserialize(contactXML);
var second = PersonSerializer.Deserialize(contactXML);

Assert.IsNotNull(first);
Assert.AreEqual("Jane Smith", first.Name);
Assert.AreEqual(25, first.Age);
Assert.IsNotNull(second);
Assert.AreEqual(first.Name, second.Name);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

Expand All @@ -10,10 +10,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.10" />
<PackageReference Include="coverlet.collector" Version="3.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.10.1" />
<PackageReference Include="MSTest" Version="4.4.1" />
<PackageReference Include="coverlet.collector" Version="10.0.1" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading