Skip to content

Commit c546540

Browse files
committed
Add support for XML deserialization
1 parent 35dddcd commit c546540

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

src/FluentHttpClient/Cookies.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ public void Add(string key, object value)
2626
base.Add(ValidateName(key), ValidateValue(value.ToString()));
2727
}
2828

29-
#if !NETSTANDARD2_0
30-
3129
public new bool TryAdd(string key, string value)
3230
{
3331
return base.TryAdd(ValidateName(key), ValidateValue(value));
@@ -38,8 +36,6 @@ public bool TryAdd(string key, object value)
3836
return base.TryAdd(ValidateName(key), ValidateValue(value.ToString()));
3937
}
4038

41-
#endif
42-
4339
public override string ToString()
4440
{
4541
return Count <= 0
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using System.Xml.Linq;
2+
using System.Xml.Serialization;
3+
4+
namespace FluentHttpClient;
5+
6+
public static class FluentXmlDeserialization
7+
{
8+
public static async Task<XElement> DeserializeXmlAsync(this Task<HttpResponseMessage> taskResponse)
9+
{
10+
return await taskResponse.DeserializeXmlAsync(LoadOptions.None, CancellationToken.None);
11+
}
12+
13+
public static async Task<XElement> DeserializeXmlAsync(this Task<HttpResponseMessage> taskResponse, LoadOptions options)
14+
{
15+
return await taskResponse.DeserializeXmlAsync(options, CancellationToken.None);
16+
}
17+
18+
public static async Task<XElement> DeserializeXmlAsync(this Task<HttpResponseMessage> taskResponse, LoadOptions options, CancellationToken? token)
19+
{
20+
token = token ?? CancellationToken.None;
21+
var response = await taskResponse;
22+
23+
return await XElement.LoadAsync(await response.GetResponseStreamAsync(), options, token.Value);
24+
}
25+
26+
public static async Task<T> DeserializeXmlAsync<T>(this Task<HttpResponseMessage> taskResponse, Func<HttpResponseMessage, Task<T>> defaultAction)
27+
{
28+
var response = await taskResponse;
29+
return (response.IsSuccessStatusCode)
30+
? await response.DeserializeXmlAsync<T>()
31+
: await defaultAction(response);
32+
}
33+
34+
public static async Task<T> DeserializeXmlAsync<T>(this Task<HttpResponseMessage> taskResponse)
35+
{
36+
var response = await taskResponse;
37+
return await response.DeserializeXmlAsync<T>();
38+
}
39+
40+
public static async Task<T> DeserializeXmlAsync<T>(this HttpResponseMessage response)
41+
{
42+
using (var reader = new StreamReader(await response.GetResponseStreamAsync()))
43+
{
44+
var serializer = new XmlSerializer(typeof(T));
45+
return (T) serializer.Deserialize(reader);
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)