gpt4 book ai didi

c# - 使用 RestSharp 的 Xml 序列反序列化

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:29 25 4
gpt4 key购买 nike

我从一个带有 XML 序列的 API 获得了这个 xml 提要。

<?xml version="1.0" encoding="UTF-8" ?>
<Function>
<Cmd>2002</Cmd>
<Status>1</Status>
<Cmd>2003</Cmd>
<Status>0</Status>
<Cmd>2004</Cmd>
<Status>0</Status>
<Cmd>1012</Cmd>
<Status>3</Status>
<Cmd>2006</Cmd>
<Status>0</Status>
<Cmd>2007</Cmd>
<Status>0</Status>
...
</Function>

我已经尝试了一些使用 Restsharp 进行反序列化的选项。理想情况下,我希望有类似下面的东西,但它显然不起作用。

public class MyResponse
{
public List<Setting> Settings { get; set;}
}

public class Setting
{
public int Cmd { get; set; }
public int Status { get; set; }
}

谢谢

最佳答案

您可以使用 DotNetXmlDeserializer RestSharp 使微软的 XmlSerializer做实际的反序列化。使用 XML serialization attributes 如下定义您的 MyResponse 类指定元素名称以及对 Cmd/Status 交替元素序列的特殊处理:

[XmlRoot("Function")]
public class MyResponse
{
[XmlIgnore]
public List<Setting> Settings { get; set; }

/// <summary>
/// Proxy property to convert Settings to an alternating sequence of Cmd / Status elements.
/// </summary>
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
[XmlAnyElement]
public XElement[] Elements
{
get
{
if (Settings == null)
return null;
return Settings.SelectMany(s => new[] { new XElement("Cmd", s.Cmd), new XElement("Status", s.Status) }).ToArray();
}
set
{
if (value == null)
Settings = null;
else
Settings = value.Where(e => e.Name == "Cmd").Zip(value.Where(e => e.Name == "Status"), (cmd, status) => new Setting { Cmd = (int)cmd, Status = (int)status }).ToList();
}
}
}

然后反序列化如下:

        var serializer = new DotNetXmlDeserializer();
var myResponse = serializer.Deserialize<MyResponse>(response);

原型(prototype) fiddle .

关于c# - 使用 RestSharp 的 Xml 序列反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32883177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com