C#获取REST xml到对象的反序列化编码冲突

C#获取REST xml到对象的反序列化编码冲突,c#,xml,serialization,encoding,uwp,C#,Xml,Serialization,Encoding,Uwp,我想从http获取xml文件并将其转换为对象。 现在我有两种方法:一种是获取http响应体,如下所示: var httpClient = new HttpClient(); var op = httpClient.GetStringAsync(uri); var httpResponseBody = ""; try { var httpResponse = await httpClient.GetAsync(uri); httpResponse.EnsureSuccessStat

我想从http获取xml文件并将其转换为对象。 现在我有两种方法:一种是获取http响应体,如下所示:

var httpClient = new HttpClient();
var op = httpClient.GetStringAsync(uri);
var httpResponseBody = "";
try {
    var httpResponse = await httpClient.GetAsync(uri);
    httpResponse.EnsureSuccessStatusCode();
    httpResponseBody = await httpResponse.Content.ReadAsStringAsync();
    return httpResponseBody;
    }
    ...
返回字符串httpResponseBody。 第二个尝试将字符串中的xml转换为对象:

res = await task;
var reader = new XmlSerializer(typeof(Schedule));
using (var tr = new MemoryStream(Encoding.UTF8.GetBytes(res)))
{
  var schedule = (Schedule)reader.Deserialize(tr);
  return schedule;
}
问题是我接收的内容采用不同的编码,我不知道如何转换它以使反序列化成为可能

我得到的是这样的东西:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ramowka><dzien name=\"PoniedziaÅ\u0082ek\" count=\"2\"/></ramowka>\n

XmlSerializer
上设置根对象修复了该问题:

var reader = new XmlSerializer(typeof(Schedule), new XmlRootAttribute("ramowka"));
…虽然我使用了稍微不同的属性:

[DataContract]
public class ScheduleDay
{
    [DataMember, XmlAttribute]
    public string name { get; set; }

    [DataMember, XmlAttribute]
    public string count { get; set; }
}

[DataContract]
public class Schedule
{
    [DataMember]
    public ScheduleDay dzien { get; set; }
}
我还没试过你的,但这些都管用


对于
ScheduleDay
s的集合,此组合起作用:

[XmlType("dzien")]
public class ScheduleDay
{
    [XmlAttribute]
    public string name { get; set; }

    [XmlAttribute]
    public string count { get; set; }
}
用法:

XmlSerializer reader = new XmlSerializer(typeof(List<ScheduleDay>), new XmlRootAttribute("ramowka"));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(Xml)))
{
    List<ScheduleDay> schedule = (List<ScheduleDay>)reader.Deserialize(stream);
}
XmlSerializer reader=newxmlserializer(typeof(List),newxmlrootattribute(“ramowka”);
使用(MemoryStream stream=newmemoryStream(Encoding.UTF8.GetBytes(Xml)))
{
列表计划=(列表)读取器。反序列化(流);
}
Schedule
类刚刚从等式中消失


在HTML中转义
\n
是XML结构的一部分,因此无需担心这些。反序列化程序将
\u0082
转换为其等效字符,即
. 你可能不想要。
Å
看起来也不合适——它是挪威字母表中的最后一个字母,在波兰语、阿拉伯语中没有使用。

XmlSerializer
上设置根对象修复了问题:

var reader = new XmlSerializer(typeof(Schedule), new XmlRootAttribute("ramowka"));
…虽然我使用了稍微不同的属性:

[DataContract]
public class ScheduleDay
{
    [DataMember, XmlAttribute]
    public string name { get; set; }

    [DataMember, XmlAttribute]
    public string count { get; set; }
}

[DataContract]
public class Schedule
{
    [DataMember]
    public ScheduleDay dzien { get; set; }
}
我还没试过你的,但这些都管用


对于
ScheduleDay
s的集合,此组合起作用:

[XmlType("dzien")]
public class ScheduleDay
{
    [XmlAttribute]
    public string name { get; set; }

    [XmlAttribute]
    public string count { get; set; }
}
用法:

XmlSerializer reader = new XmlSerializer(typeof(List<ScheduleDay>), new XmlRootAttribute("ramowka"));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(Xml)))
{
    List<ScheduleDay> schedule = (List<ScheduleDay>)reader.Deserialize(stream);
}
XmlSerializer reader=newxmlserializer(typeof(List),newxmlrootattribute(“ramowka”);
使用(MemoryStream stream=newmemoryStream(Encoding.UTF8.GetBytes(Xml)))
{
列表计划=(列表)读取器。反序列化(流);
}
Schedule
类刚刚从等式中消失


在HTML中转义
\n
是XML结构的一部分,因此无需担心这些。反序列化程序将
\u0082
转换为其等效字符,即
. 你可能不想要。
Å
看起来也不合适——这是挪威字母表中的最后一个字母,在波兰语中没有使用。

我将Schedule类更改为:

[XmlType(AnonymousType = true)]
[XmlRootAttribute("ramowka")]
public class Schedule
{
    [XmlElementAttribute("dzien")]
    public ScheduleDay[] AuditionDays { get; set; }
}

现在它看起来像在工作。感谢Petter对Root属性的提示。

我已将Schedule类更改为:

[XmlType(AnonymousType = true)]
[XmlRootAttribute("ramowka")]
public class Schedule
{
    [XmlElementAttribute("dzien")]
    public ScheduleDay[] AuditionDays { get; set; }
}

现在它看起来像在工作。感谢Petter对Root属性的提示。

Schedule类是什么样子的?Schedule类是什么样子的?我只给出了一个示例,但其中有更多的标记。如何处理它?我只给出了一个示例,但其中有更多的标记。如何处理它比?