C# 如何设置XNode对象的xmlns属性
我正在创建一个XMLXNode对象,我可以将它发送到HttpClient请求API中。我想使用该类创建XML,然后将其传递给HttpClient 首先,我创建了与XML中的节点名称完全相同的类。所以我使用的字段名是camel大小写,但现在我想使用pascal大小写 所以对于camel案例,它是有效的,但是现在因为我在camel案例中需要XML,所以我找到的解决方案是首先用camel案例将其序列化为JSON,然后将JSON反序列化为xmlxnode对象。但随后出现的另一个问题是根元素中的属性xmlns属性 下面是序列化为JSON并反序列化为XNode对象的代码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
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太长,无法将每个字段转换为驼峰大小写。我需要为类中每个字段上方的每个字段编写一个驼峰案例。这将耗费大量时间,我个人认为这不是一个理想的解决方案。