【发布时间】:2021-10-14 00:32:28
【问题描述】:
有没有办法从.net core 3 中的控制器序列化ActionResult<ArrayList>,其中ArrayList 由某种类型T(在这种情况下为Person)组成。
它不会序列化为 XML,只会序列化为 JSON。它抱怨Person 的类型未知(即使它是已知的,并且它本身或作为数组序列化就好了)。
即序列化失败:
[HttpGet("List")]
public ActionResult<ArrayList> AllPersons() {...}
这行得通:
[HttpGet("List")]
public ActionResult<Person[]> AllPersons() {...}
所以Person 类型 (T) 可以自行很好地序列化,Person[] 也可以很好地序列化,但是当ArrayList(Person)的 XML 序列化失败时:
System.InvalidOperationException:生成错误 XML 文档。 ---> System.InvalidOperationException:类型 SimpleRESTServer.Models.Person 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。
(Person 类型是静态已知的,Person 和 Person[] 都可以很好地序列化):
[XmlInclude(typeof(Person))]
[Serializable]
public class Person ...
【问题讨论】:
-
我无法评论为什么这段特定的代码不会运行,但是 ArrayList 的设计方式是所有项目都是“对象”,我怀疑这是导致问题的原因。有什么特殊的原因你不能像 arrayList.Cast
这样至少返回一个 IEnumerable 吗? -
你有一个继承了基类的类。 XmlInclude(typeof(Person) :XmlInclude 属于基类,typeof 是继承的类之一。对于每个继承的类,您需要在基类上方有一个 XmlInclude。您在同名的类上方有 Person . XmlInclude 的值必须与其上面的类不同。
标签: c# xml .net-core serialization