繁体   English   中英

RestSharp反序列化导致空对象

[英]RestSharp deserialization causing null object

我正在尝试使用RestSharp从Prestashop网站到我的C#程序中实现Web服务API。 我在反序列化方面遇到了一些麻烦,并且正在对我的对象造成空错误,因此应该将其反序列化为...

首先,这是GET函数返回的XML。 我直接从IRestResponse编写数据,RestSharp通过以下代码为我提供了该数据:

System.IO.File.WriteAllText("response.txt", response.Content);

这是从中保存的txt文件:

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<customer>
<id><![CDATA[1]]></id>
<id_default_group xlink:href="http://removed.com/api/groups/3"><![CDATA[3]]></id_default_group>
<id_lang xlink:href="http://removed.com/api/languages/1"><![CDATA[1]]></id_lang>
<newsletter_date_add><![CDATA[2013-12-13 08:19:15]]></newsletter_date_add>
<ip_registration_newsletter></ip_registration_newsletter>
<last_passwd_gen><![CDATA[2014-06-20 16:56:30]]></last_passwd_gen>
<secure_key><![CDATA[6a9b9eab95448d74a026b869d8cd723e]]></secure_key>
<deleted><![CDATA[0]]></deleted>
<passwd><![CDATA[6028853eb1033578f7432015042fa486]]></passwd>
<lastname><![CDATA[DOE]]></lastname>
<firstname><![CDATA[John]]></firstname>
<email><![CDATA[pub@prestashop.com]]></email>
<id_gender><![CDATA[1]]></id_gender>
<birthday><![CDATA[1970-01-15]]></birthday>
<newsletter><![CDATA[1]]></newsletter>
<optin><![CDATA[1]]></optin>
<website></website>
<company></company>
<siret></siret>
<ape></ape>
<outstanding_allow_amount><![CDATA[0.000000]]></outstanding_allow_amount>
<show_public_prices><![CDATA[0]]></show_public_prices>
<id_risk><![CDATA[0]]></id_risk>
<max_payment_days><![CDATA[0]]></max_payment_days>
<active><![CDATA[1]]></active>
<note></note>
<is_guest><![CDATA[0]]></is_guest>
<id_shop><![CDATA[1]]></id_shop>
<id_shop_group><![CDATA[1]]></id_shop_group>
<date_add><![CDATA[2014-08-01 13:20:37]]></date_add>
<date_upd><![CDATA[2014-08-01 13:20:37]]></date_upd>
<associations>
<groups node_type="group">
<group xlink:href="http://removed.com/api/groups/3">
<id><![CDATA[3]]></id>
</group>
</groups>
</associations>
</customer>
</prestashop>

为了尝试仅使用几个元素(名字和姓氏)来序列化它,我尝试使用以下代码:

public class prestashop
{
    public customer customer { get; set; }
}

public class customer
{
    public string firstname { get; set; }
    public string lastname { get; set; }
}

然后针对实际通话本身:

// Attempt a request with XML Deserialization
request = new RestRequest { RequestFormat = DataFormat.Xml };
request.Resource = "/customers/1";
IRestResponse<prestashop> newResponse = client.Execute<prestashop>(request);
prestashop shopData = newResponse.Data;
Console.WriteLine("Data read: " + shopData.customer.firstname);

这在“对象引用未设置为对象的实例”的最后一行上引发了一个错误。

由此,我假设反序列化在某处是错误的,但是我不确定在哪里……我试图创建的类是如此基础?

我想知道的是XML文件的第一行,因为它实际上在最前面包含了XML行,这会以某种方式使解析混乱吗?

(编辑:我不确定为什么将空对象标记为重复...我已经知道为什么它为空,并且我说了这一点并提供了代码-我知道它为空,因为RestSharp没有正确反序列化到我的对象中。它为null时不执行任何操作,我需要知道的是为什么它不进行反序列化,因为根据RestSharp提供的规则,我相信我的prestashop对象是正确创建的,确切地说,反序列化的问题是什么?

链接的帖子绝对没有任何帮助,因为它不能解释为什么RestSharp的反序列化无法正常工作。

所以我找到了答案。

事实证明,在上面的代码中,“ prestashop”对象被反序列化为客户。 反序列化器忽略了prestashop XML。 客户的所有子级都可以通过prestashop类进行访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM