RestSharp编辑xml文件的一个元素

时间:2014-08-07 17:14:51

标签: c# xml put restsharp

有关我正在使用的API的文档,说明如下:

To edit an existing resource: GET the full XML file for the resource you want to change (/api/customers/7), edit its content as needed, then PUT the whole XML file back to the same URL again.

现在我的问题是,如果我只想编辑XML文件中的一个元素(多个元素中),那么RestSharp中是否有任何函数允许我只编辑那个单独的元素而不反序列化整个XML?

例如,我的XML:

<?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://heatherfazelinia.com/api/groups/3"><![CDATA[3]]></id_default_group>
    <id_lang xlink:href="http://heatherfazelinia.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://heatherfazelinia.com/api/groups/3">
    <id><![CDATA[3]]></id>
    </group>
</groups>
</associations>
</customer>
</prestashop>

我已经想出了如何反序列化特定值,例如:“firstname”和“lastname”。

但我当前的问题是:如果我只想用PUT请求编辑该XML的“firstname”,我是否需要反序列化和编辑整个XML?或者RestSharp中是否有任何功能可以帮助解决这个问题,我可以直接在其中编辑“firstname”元素?

由于

1 个答案:

答案 0 :(得分:0)

RestSharp不是序列化/反序列化框架。它是“用于.NET的简单REST和HTTP API客户端”。它确实带有开箱即用的功能,例如将xml / json反序列化为适当的对象(使用第三方框架,如Json.NET)。

因此,它无法满足您的要求,您必须反序列化整个xml并更改所需的属性。

使用LINQ 2 XML

可以轻松完成您需要完成的工作
//Assuming you get your xml as a string:
var xml = XElement.Load(yourXmlString);

var firstName = xml.Element("customer").Element("firstname");
var lastName = xml.Element("customer").Element("lastname");

firstName.Value = "firstChange";
lastName.Value = "secondChange";

var returnedXml = xml.ToString();

当然,您必须添加无效检查,异常处理等。