c# - XMLSerializer 异常“存在错误反映字段”和“对于非数组类型,您可以使用以下属性:XmlAttribute, ..”
问题描述
请耐心等待,因为我是新手。我需要将 JSON 字符串转换为 XML 进行一些修改
{"computerid":123456,"computername":"mycomputer","computermodel":"mymodel"}
至
<?xml version="1.0"?>
<SqlMultiFilter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Parameter>
<Filter>
<ParamName>computerid</ParamName>
<ParamValues>
<ParamValue>123456</ParamValue>
</ParamValues>
</Filter>
<Filter>
<ParamName>computername</ParamName>
<ParamValues>
<ParamValue>mycomputer</ParamValue>
</ParamValues>
</Filter>
<Filter>
<ParamName>computermodel</ParamName>
<ParamValues>
<ParamValue>mymodel</ParamValue>
</ParamValues>
</Filter>
</Parameter>
</SqlMultiFilter>
我以这种方式创建了一个公共课程
[XmlRoot("SQLMultiFilter", Namespace = "http://www.cpandl.com",
IsNullable = false)]
public class SQLMultiFilter
{
[XmlArrayAttribute("Parameter")]
public string ParamName;
[XmlArrayAttribute("ParamValues")]
public string ParamValue;
}
当我发布我的 json 时,我遇到了错误
XmlSerializer serializer = new XmlSerializer(typeof(SQLMultiFilter));
错误
Inner Exception 1:
InvalidOperationException: There was an error reflecting field 'ParamName'.
Inner Exception 2:
InvalidOperationException: For non-array types, you may use the following attributes: XmlAttribute, XmlText, XmlElement, or XmlAnyElement.
我哪里错了?
提前致谢
解决方案
[XmlRoot("SQLMultiFilter", Namespace = "http://www.cpandl.com", IsNullable = false)]
public class SqlMultiFilter
{
public List<Filter> Parameter { get; set; }
}
public class Filter
{
public string ParamName;
[XmlArrayItem("ParamValue")]
public List<string> ParamValues { get; set; }
}
这两个类将允许您重现所显示模式的 XML。
var serializer = new XmlSerializer(typeof(SqlMultiFilter));
var sqlMultiFilter = new SqlMultiFilter
{
Parameter = new List<Filter>
{
new Filter { ParamName = "computerid", ParamValues = new List<string> { "123456" } },
new Filter { ParamName = "computername", ParamValues = new List<string> { "mycomputer" } },
new Filter { ParamName = "computermodel", ParamValues = new List<string> { "mymodel" } }
}
};
var settings = new XmlWriterSettings { Indent = true };
using (var xmlWriter = XmlWriter.Create(Console.Out, settings))
serializer.Serialize(xmlWriter, sqlMultiFilter);
会给出想要的结果。
推荐阅读
- java - org.osgi.service.blueprint.container.ComponentDefinitionException:无法实例化组件
- spring-boot - 使用 Spring-jdbcTemplate 进行 voltdb 过程调用时出现异常
- string - 如何在字符串中拆分 3 个分隔符
- r - 如何防止“隐藏”操作按钮重置 R 闪亮中的所有用户输入?
- migration - 如何将 JIRA 云备份 zip 文件从我们的旧 JIRA 云导入到新的 JIRA 云帐户?
- typescript - Ionic5 Capacitor AppRate 未安装
- mongodb - 没有 ODBC 的 mongosqld + PowerBI
- android - 为什么导入swing会在kotlin中给我一个错误
- javascript - 如何在使用默认分页时使用复选框选择多行 gridivew。我只从 gridivew 的第一页获取数据
- javascript - 浏览器不会在 React App 中渲染图像