Skip to content
Merged
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
5 changes: 0 additions & 5 deletions .github/workflows/build-master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,3 @@ jobs:

- name: Create NuGet package
run: dotnet pack -c Release -o nuget -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg

- name: Push NuGet package
run: dotnet nuget push **/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate


30 changes: 0 additions & 30 deletions .github/workflows/publish-docs.yml

This file was deleted.

15 changes: 5 additions & 10 deletions src/RestSharp/Serializers/Xml/XmlSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -193,19 +193,14 @@ void Map(XContainer root, object obj)
}
else if (rawValue is IList items)
{
var itemTypeName = "";

foreach (var item in items)
{
if (itemTypeName == "")
{
var type = item.GetType();
var setting = type.GetAttribute<SerializeAsAttribute>();
var type = item.GetType();
var setting = type.GetAttribute<SerializeAsAttribute>();

itemTypeName = setting != null && setting.Name.HasValue()
? setting.Name
: type.Name;
}
var itemTypeName = setting != null && setting.Name.HasValue()
? setting.Name
: type.Name;

var instance = new XElement(itemTypeName.AsNamespaced(Namespace));

Expand Down
71 changes: 69 additions & 2 deletions test/RestSharp.Tests/XmlSerializerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,36 @@ public XmlSerializerTests()
Thread.CurrentThread.CurrentUICulture = CultureInfo.InstalledUICulture;
}

[Test]
public void Can_serialize_a_list_of_items_with_interface_type()
{
var items = new NamedItems
{
Items = new List<INamed>
{
new Person
{
Name = "Foo",
Age = 50,
Price = 19.95m,
StartDate = new DateTime(2009, 12, 18, 10, 2, 23),
Items = new List<Item>
{
new Item {Name = "One", Value = 1},
}
},
new Item {Name = "Two", Value = 2},
new Item {Name = "Three", Value = 3}
}
};

var xml = new XmlSerializer();
var doc = xml.Serialize(items);
var expected = GetNamedItemsXDoc(CultureInfo.InvariantCulture);

Assert.AreEqual(expected.ToString(), doc);
}

[Test]
public void Can_serialize_a_list_which_is_the_content_of_root_element()
{
Expand Down Expand Up @@ -289,7 +319,12 @@ public void Serializes_Properties_In_Specified_Order()
Assert.AreEqual(expected.ToString(), doc);
}

class Person
interface INamed
{
string Name { get; set; }
}

class Person : INamed
{
public string Name { get; set; }

Expand All @@ -304,7 +339,7 @@ class Person
public bool? IsCool { get; set; }
}

class Item
class Item : INamed
{
public string Name { get; set; }

Expand Down Expand Up @@ -336,6 +371,12 @@ class WackyPerson
public ContactData ContactData { get; set; }
}

class NamedItems
{
[SerializeAs(Content = true)]
public List<INamed> Items { get; set; }
}

[SerializeAs(Name = "People")]
class Contacts
{
Expand Down Expand Up @@ -527,6 +568,32 @@ static XDocument GetSortedPropsXDoc()
return doc;
}

static XDocument GetNamedItemsXDoc(IFormatProvider culture)
{
var doc = new XDocument();
var root = new XElement("NamedItems");
var element = new XElement("Person");
var items = new XElement("Items");

items.Add(new XElement("Item", new XElement("Name", "One"), new XElement("Value", 1)));

element.Add(
new XElement("Name", "Foo"),
new XElement("Age", 50),
new XElement("Price", 19.95m.ToString(culture)),
new XElement("StartDate", new DateTime(2009, 12, 18, 10, 2, 23).ToString(culture))
);

element.Add(items);
root.Add(element);
root.Add(new XElement("Item", new XElement("Name", "Two"), new XElement("Value", 2)));
root.Add(new XElement("Item", new XElement("Name", "Three"), new XElement("Value", 3)));

doc.Add(root);

return doc;
}

static XDocument GetPeopleXDoc(IFormatProvider culture)
{
var doc = new XDocument();
Expand Down