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# 如何设置XNode对象的xmlns属性_C#_Xml_Asp.net Core_.net Core - Fatal编程技术网

C# 如何设置XNode对象的xmlns属性

C# 如何设置XNode对象的xmlns属性,c#,xml,asp.net-core,.net-core,C#,Xml,Asp.net Core,.net Core,我正在创建一个XMLXNode对象,我可以将它发送到HttpClient请求API中。我想使用该类创建XML,然后将其传递给HttpClient 首先,我创建了与XML中的节点名称完全相同的类。所以我使用的字段名是camel大小写,但现在我想使用pascal大小写 所以对于camel案例,它是有效的,但是现在因为我在camel案例中需要XML,所以我找到的解决方案是首先用camel案例将其序列化为JSON,然后将JSON反序列化为xmlxnode对象。但随后出现的另一个问题是根元素中的属性xml

我正在创建一个XMLXNode对象,我可以将它发送到HttpClient请求API中。我想使用该类创建XML,然后将其传递给HttpClient

首先,我创建了与XML中的节点名称完全相同的类。所以我使用的字段名是camel大小写,但现在我想使用pascal大小写

所以对于camel案例,它是有效的,但是现在因为我在camel案例中需要XML,所以我找到的解决方案是首先用camel案例将其序列化为JSON,然后将JSON反序列化为xmlxnode对象。但随后出现的另一个问题是根元素中的属性xmlns属性

下面是序列化为JSON并反序列化为XNode对象的代码

var resolver = new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy() };
var settings = new JsonSerializerSettings { ContractResolver = resolver };
//serialize class to json
var json = JsonConvert.SerializeObject(creditBureau2, settings);
//desrialize to XNode object
XNode xml2 = JsonConvert.DeserializeXNode(json, ToCamelCasing(nameof(CreditBureau)));
现在,要设置根元素的名称空间,请尝试以下代码

xml2.Document.Root.SetAttributeValue("xmlns", "http://www.example.com/namespace");
但问题是,当我在上面执行之后检查XNode对象(xml2)的值时,它会更改为以前的其他格式。发送xml2.ToString()时;它抛出异常。我附上的截图,请看一下


xmlns是一个保留关键字,这就是它导致问题的原因。可以将名称空间添加到xml的每个元素中

var doc = XDocument.Parse(xml2.ToString());
XNamespace xs = "http://www.example.com/namespace";
foreach (var elemeent in doc.Descendants())
{
    elemeent.Name = xs + elemeent.Name.LocalName;
}

为什么不使用XmlRootAttribute和XmlElementAttribute对类和属性进行注释,以便按照您的意愿对XML进行序列化,而不是执行这一浪费的额外序列化步骤?是的,我也考虑过这一点,但XML太长,无法将每个字段转换为驼峰大小写。我需要为类中每个字段上方的每个字段编写一个驼峰案例。这将耗费大量时间,我个人认为这不是一个理想的解决方案。