Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用RestSharp反序列化XML响应_C#_Xml_Api_Restsharp - Fatal编程技术网

C# 使用RestSharp反序列化XML响应

C# 使用RestSharp反序列化XML响应,c#,xml,api,restsharp,C#,Xml,Api,Restsharp,我已经通读了这里已经提出的关于这个主题的各种问题,我仍然没有接近解决我的问题 我正在尝试反序列化此xml响应: <?xml version="1.0" encoding="ISO-8859-1" ?> <SubmissionResult> <Result>ACCEPTED</Result> <SubmissionID> <RefNo>77587-1425386500</

我已经通读了这里已经提出的关于这个主题的各种问题,我仍然没有接近解决我的问题

我正在尝试反序列化此xml响应:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
   <SubmissionResult>
     <Result>ACCEPTED</Result>
       <SubmissionID>
         <RefNo>77587-1425386500</RefNo>
         <Submitted>9</Submitted>
         <ValidNo>7</ValidNo>
         <InvalidNo>2</InvalidNo>
         <InvalidNo_1>08452782055</InvalidNo_1>
         <InvalidNo_2>01234567890</InvalidNo_1>
         <TextvID>77587-1425386500</TextvID>
       </SubmissionID>
     <Credits>999999</Credits>
   </SubmissionResult> 
但是,我只返回null和0值,我假设这是默认值

下面是获取结果并希望进行反序列化的代码:

try
{
    var request = new RestRequest();
    request.RequestFormat = DataFormat.Xml;
    request.Resource = APIURL;
    request.RootElement = "SubmissionResult";

    SubmissionResult r = Execute<SubmissionResult>(request);
}

public static T Execute<T>(RestRequest request) where T : new()
{
     var client = new RestClient();
         client.BaseUrl = new  Uri("https://www.textvertising.co.uk/_admin/api", UriKind.Absolute);

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

     return response.Data;
}
试试看
{
var request=new RestRequest();
request.RequestFormat=DataFormat.Xml;
request.Resource=apirl;
request.RootElement=“SubmissionResult”;
SubmissionResult r=执行(请求);
}
公共静态T执行(重新请求请求),其中T:new()
{
var client=new RestClient();
client.BaseUrl=新Uri(“https://www.textvertising.co.uk/_admin/api“,乌里金。绝对);
var response=client.Execute(请求);
返回响应数据;
}
非常感谢您能提供的任何帮助


CS

使用Restsharp,我通常使用不同的方法,但我主要使用JSON。这是使用MVCWebAPI吗

我将创建一个类型为
IRestClient
的客户机,其中我将设置API url和一些头。然后我会用,

var response = client.Post<T>(DataFormat.Json, "admin/api", content); 
if(response.Data != null)
//populate T object with data
var response=client.Post(DataFormat.Json,“admin/api”,content);
if(response.Data!=null)
//用数据填充T对象
如果可以,请提供有关正在调用的web服务方法的更多信息。。这会有帮助的,谢谢:)祝你好运

看看这个
老实说,我从来没有使用过RestClient.Execute,但是这个链接应该有帮助,我做了一些更改,可以让它工作:

可能是问题中的一个输入错误,但我必须改变的是,发布的XML无效:

<InvalidNo_2>01234567890</InvalidNo_1>
此外,我还必须删除根元素设置,该设置与.NET serializer不兼容,因此删除了以下行:

request.RootElement = "SubmissionResult";   
所以我的版本变成:

var request = new RestRequest();
request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();
request.RequestFormat = DataFormat.Xml;
// request.Resource = APIURL;

SubmissionResult r = Execute<SubmissionResult>(request);
我在mocky.io上创建了一个模拟响应,并用它进行了测试,它似乎运行良好:

public static T Execute<T>(RestRequest request) where T : new()
{
    var client = new RestClient();
    client.BaseUrl = new Uri("http://www.mocky.io/v2/56cd88660f00009800d61ff8", UriKind.Absolute);

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

    return response.Data;
}
publicstatict执行(RestRequest请求),其中T:new()
{
var client=new RestClient();
client.BaseUrl=新Uri(“http://www.mocky.io/v2/56cd88660f00009800d61ff8“,乌里金。绝对);
var response=client.Execute(请求);
返回响应数据;
}

反序列化xml响应的简单代码

//Create object of RestClient
IRestClient restClient = new RestClient();

//Create request with return type of payload as xml and method as GET
IRestRequest restRequest = new RestRequest(Url);
restRequest.AddHeader("Accept", "application/xml");
restRequest.Method = Method.GET;

//Execute the request to fetch the response
IRestResponse restResponse = restClient.Execute(restRequest);

//This is wrapper for System.Xml.Serialization.XmlSerializer 
var dotNetXmlDeserializer = new RestSharp.Deserializers.DotNetXmlDeserializer();
ModelClassName modelClassObject =
 dotNetXmlDeserializer.Deserialize<ModelClassName>(restResponse);

 Console.WriteLine(ModelClassName.PropertyName);

       
//创建RestClient的对象
IRestClient restClient=new restClient();
//创建请求,返回有效负载类型为xml,方法为GET
IRestRequest restRequest=新的restRequest(Url);
AddHeader(“接受”、“应用程序/xml”);
restRequest.Method=Method.GET;
//执行请求以获取响应
IRestResponse response=restClient.Execute(restRequest);
//这是System.Xml.Serialization.XmlSerializer的包装器
var dotNetXmlDeserializer=新的RestSharp.Deserializers.dotNetXmlDeserializer();
ModelClassName modelClassObject=
dotNetXmlDeserializer.Deserialize(重新响应);
Console.WriteLine(ModelClassName.PropertyName);
其中ModelClassName是我们创建的用于以反序列化形式存储响应的POCO类

您可以通过以下方式将复制的JSON/XML格式的有效负载粘贴到POCO类中: 使用Visual Studio内置功能。编辑->粘贴特殊->粘贴 JSON/XML作为类


TextvID在XML和code属性中的大小写不兼容。次要的,可能不相关,但您仍然应该修复它。
[XmlElement("RefNo")]
public string RefNo { get; set; }
public static T Execute<T>(RestRequest request) where T : new()
{
    var client = new RestClient();
    client.BaseUrl = new Uri("http://www.mocky.io/v2/56cd88660f00009800d61ff8", UriKind.Absolute);

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

    return response.Data;
}
//Create object of RestClient
IRestClient restClient = new RestClient();

//Create request with return type of payload as xml and method as GET
IRestRequest restRequest = new RestRequest(Url);
restRequest.AddHeader("Accept", "application/xml");
restRequest.Method = Method.GET;

//Execute the request to fetch the response
IRestResponse restResponse = restClient.Execute(restRequest);

//This is wrapper for System.Xml.Serialization.XmlSerializer 
var dotNetXmlDeserializer = new RestSharp.Deserializers.DotNetXmlDeserializer();
ModelClassName modelClassObject =
 dotNetXmlDeserializer.Deserialize<ModelClassName>(restResponse);

 Console.WriteLine(ModelClassName.PropertyName);