【发布时间】:2021-11-28 15:28:57
【问题描述】:
编辑
XML 输入看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<Object1>
<field1>Hello</field1>
<field2>
<field3>World</field3>
<field4>
<field5>Test</field5>
<field6>Test2</field6>
</field4>
</field2>
</Object1>
我对如何让我的 API 接受复杂的 XML 对象有点困惑
比如我有一个类是这样的
public class Object1
{
public string field1 {get; set;}
public Object2 field2 {get; set;}
}
public class Object2
{
public string field3 {get; set;}
public Object3 field4 {get; set;}
}
public class Object3
{
public string field5 {get; set;}
public string field6 {get; set;}
}
在我的 startup.cs 文件中,我添加了这个
services.AddControllers().AddXmlDataContractSerializerFormatters()
.AddXmlSerializerFormatters();
然后我收到无法反序列化输入的错误。
所以我将这些属性添加到对象中
[DataContract(Namespace = "")]
[XmlRoot]
public class Object1
{
[DataMember(Name = "field1")]
public string field1 {get; set;}
[DataMember(Name = "field2")]
public Object2 field2 {get; set;}
}
[DataContract(Name = "field2", IsReference = true)]
public class Object2
{
[DataMember(Name = "field3")]
public string field3 {get; set;}
[DataMember(Name = "field4")]
public Object3 field4 {get; set;}
}
[DataContract(Name = "field3", IsReference = true)]
public class Object3
{
[DataMember(Name = "field5")]
public string field5 {get; set;}
[DataMember(Name = "field6")]
public string field6 {get; set;}
}
所以现在当我发送 XML 对象时,它现在可以进行一些处理了。我可以得到 field1 的值,看起来 field2 对象不再为空,但其中的所有内容都是空的。
我不确定如何正确处理这个问题。我有什么遗漏吗?
我的控制器看起来像这样
[HttpPost]
[Consumes("application/xml")]
public async Task<IActionResult> UpdateObject([FromBody]Object1 object1)
{
var testObject1 = object1.field1; // this value is not null because it is a string datatype and not like the one below which is slightly more complex
var testObject2 = object1.field2; //this is not null but the properties inside the object are null
}
【问题讨论】:
标签: c# xml api asp.net-core-3.1 datacontractserializer