Skip to content

Commit a94c317

Browse files
authored
Added XmlExtensions
1 parent 4639232 commit a94c317

File tree

8 files changed

+139
-11
lines changed

8 files changed

+139
-11
lines changed

Extensions.Tests/GenericExtensionsTests.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Extensions.Tests.Models;
12
using System.Collections.Generic;
23
using Xunit;
34

@@ -29,15 +30,4 @@ public void SafeGet_From_Collection_Test()
2930
Assert.Equal(0, obj.SafeGet(x => x[10]));
3031
}
3132
}
32-
33-
internal class Model
34-
{
35-
public Nested Nested { get; set; }
36-
public int Number { get; set; }
37-
}
38-
39-
internal class Nested
40-
{
41-
public string Number { get; set; }
42-
}
4333
}

Extensions.Tests/LinqExtensionsTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Extensions.Tests.Models;
12
using System.Collections.Generic;
23
using System.Linq;
34
using Xunit;

Extensions.Tests/Models/Model.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Extensions.Tests.Models
2+
{
3+
public class Model
4+
{
5+
public Nested Nested { get; set; }
6+
public int Number { get; set; }
7+
}
8+
}

Extensions.Tests/Models/Nested.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Extensions.Tests.Models
2+
{
3+
public class Nested
4+
{
5+
public string Number { get; set; }
6+
}
7+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Xml;
2+
using Xunit;
3+
using Extensions.Xml;
4+
5+
namespace Extensions.Tests
6+
{
7+
public class XmlNodeExtensionsTests
8+
{
9+
private const string defaultAttributeValue = "default";
10+
11+
[Fact]
12+
public void GetAttributeWithDefault_No_Attribute_Test()
13+
{
14+
XmlDocument doc = new XmlDocument();
15+
XmlNode newElem = doc.CreateNode("element", "name", string.Empty);
16+
var result = newElem.GetAttributeWithDefault("attributeName", defaultAttributeValue);
17+
Assert.Equal(defaultAttributeValue, result);
18+
}
19+
20+
[Fact]
21+
public void GetAttributeWithDefault_Test()
22+
{
23+
const string attributeName = "a";
24+
const string attributeValue = "123";
25+
XmlDocument doc = new XmlDocument();
26+
XmlNode newElem = doc.CreateNode("element", "name", string.Empty);
27+
var attribute = doc.CreateAttribute(attributeName);
28+
attribute.Value = attributeValue;
29+
newElem.Attributes.Append(attribute);
30+
var result = newElem.GetAttributeWithDefault(attributeName, defaultAttributeValue);
31+
Assert.Equal(attributeValue, result);
32+
}
33+
}
34+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using Xunit;
2+
using Extensions.Xml;
3+
using Extensions.Tests.Models;
4+
5+
namespace Extensions.Tests
6+
{
7+
public class XmlSerializerExtensionsTests
8+
{
9+
[Fact]
10+
public void XmlSerializeToString_Test()
11+
{
12+
var model = new Model()
13+
{
14+
Number = 1,
15+
Nested = new Nested { Number = "1" }
16+
};
17+
var serializedModel = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<Model xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n <Nested>\r\n <Number>1</Number>\r\n </Nested>\r\n <Number>1</Number>\r\n</Model>";
18+
var result = model.XmlSerializeToString();
19+
Assert.Equal(serializedModel, result);
20+
}
21+
22+
[Fact]
23+
public void XmlDeserializeFromString_Test()
24+
{
25+
var serializedModel = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<Model xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n <Nested>\r\n <Number>1</Number>\r\n </Nested>\r\n <Number>1</Number>\r\n</Model>";
26+
var result = serializedModel.XmlDeserializeFromString<Model>();
27+
Assert.Equal(1, result.Number);
28+
Assert.Equal("1", result.Nested.Number);
29+
}
30+
}
31+
}

Extensions/Xml/XmlNodeExtensions.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Xml;
2+
3+
namespace Extensions.Xml
4+
{
5+
public static class XmlNodeExtensions
6+
{
7+
public static string GetAttributeWithDefault(this XmlNode configNode, string attributeName, string @default)
8+
{
9+
return configNode.Attributes[attributeName] == null ? @default : configNode.Attributes[attributeName].Value.IsNullOrEmpty() ? @default : configNode.Attributes[attributeName].Value;
10+
}
11+
}
12+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using System.IO;
3+
using System.Text;
4+
using System.Xml.Serialization;
5+
6+
namespace Extensions.Xml
7+
{
8+
public static class XmlSerializerExtensions
9+
{
10+
//<?xml version="1.0" encoding="utf-16"?>
11+
// <MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
12+
// <S>sa</S>
13+
// </MyClass>
14+
public static string XmlSerializeToString(this object obj)
15+
{
16+
var serializer = new XmlSerializer(obj.GetType());
17+
var sb = new StringBuilder();
18+
19+
using (TextWriter writer = new StringWriter(sb))
20+
{
21+
serializer.Serialize(writer, obj);
22+
}
23+
24+
return sb.ToString();
25+
}
26+
27+
public static T XmlDeserializeFromString<T>(this string str)
28+
{
29+
return (T)XmlDeserializeFromString(str, typeof(T));
30+
}
31+
32+
public static object XmlDeserializeFromString(this string str, Type type)
33+
{
34+
var serializer = new XmlSerializer(type);
35+
object result;
36+
37+
using (TextReader reader = new StringReader(str))
38+
{
39+
result = serializer.Deserialize(reader);
40+
}
41+
42+
return result;
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)