gpt4 book ai didi

c# - Restsharp XML 反序列化

转载 作者:数据小太阳 更新时间:2023-10-29 02:56:21 25 4
gpt4 key购买 nike

我正在发布一个获取请求,它返回一个 xml 文件,但是当我尝试将它反序列化为一个列表时,我收到以下错误:

{"No parameterless constructor defined for this object."}

RestClient 类(调用 GetResourceList):

public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = new Uri(m_URL);
client.Authenticator = new HttpBasicAuthenticator(m_Username, m_Password);

var response = client.Execute<T>(request);

if (response.ErrorException != null)
{
const string message = "Error retrieving response. Check inner details for more info.";
var exception = new ApplicationException(message, response.ErrorException);
throw exception;
}
return response.Data;
}

public List<resource> GetResourceList()
{
var request = new RestRequest();
request.Resource = "resource";
request.AddHeader("Accept", "application/xml");

return Execute<List<resource>>(request);
}

模型(使用 xsd 从 API 提供的 xsd 文件生成):

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class resource {

private string selfField;

private string userIDField;

private string firstNameField;

private string lastNameField;

private string extensionField;

private nameUriPair resourceGroupField;

private skillCompetency[] skillMapField;

private bool autoAvailableField;

private int typeField;

private nameUriPair teamField;

private resourcePrimarySupervisorOf primarySupervisorOfField;

private resourceSecondarySupervisorOf secondarySupervisorOfField;

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string self {
get {
return this.selfField;
}
set {
this.selfField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string userID {
get {
return this.userIDField;
}
set {
this.userIDField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string firstName {
get {
return this.firstNameField;
}
set {
this.firstNameField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string lastName {
get {
return this.lastNameField;
}
set {
this.lastNameField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string extension {
get {
return this.extensionField;
}
set {
this.extensionField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public nameUriPair resourceGroup {
get {
return this.resourceGroupField;
}
set {
this.resourceGroupField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlArrayItemAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public skillCompetency[] skillMap {
get {
return this.skillMapField;
}
set {
this.skillMapField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public bool autoAvailable {
get {
return this.autoAvailableField;
}
set {
this.autoAvailableField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public int type {
get {
return this.typeField;
}
set {
this.typeField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public nameUriPair team {
get {
return this.teamField;
}
set {
this.teamField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public resourcePrimarySupervisorOf primarySupervisorOf {
get {
return this.primarySupervisorOfField;
}
set {
this.primarySupervisorOfField = value;
}
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public resourceSecondarySupervisorOf secondarySupervisorOf {
get {
return this.secondarySupervisorOfField;
}
set {
this.secondarySupervisorOfField = value;
}
}
}

返回 XML:

<resources>
<resource>...</resource>
<resource>...</resource>
<resource>...</resource>
</resources>

在资源类/支持类中添加一个空的构造函数似乎没有帮助。有任何想法吗 ?还尝试直接反序列化资源而不是整个列表同样的错误。

最佳答案

遇到同样的问题后,我发现 RestSharp 不能很好地处理使用 xsd.exe 创建的类。

恢复到经典反序列化器:

System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));

using (StringReader sr = new StringReader(response.Content))
return (T)ser.Deserialize(sr);

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

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