报错:
生成 XML 文档时出错。使用 XmlInclude 或 SoapInclude 特性静态指定非已知的类型
原因:
c# xml object类型序列化失败
解决:
对于obejct属性、字段需要指定通过Xml特性(XmlElement、XmlArrayItem等等)指定类型
实体:
成员指定类型 [XmlElement("Name", Type = typeof(ClassType))]
[Serializable]
[XmlRoot(ElementName = "ROOT")]
[XmlInclude(typeof(PayRequest))]
[XmlInclude(typeof(CheckAccountDetailInput))]
public class Request
{
[System.Xml.Serialization.XmlElementAttribute("HEADER")]
public RequestHeader header = new RequestHeader();
[XmlElement("BODY")]
public object Body;
[XmlArrayAttribute(ElementName = "LIST")]
[XmlArrayItem("ITEM")]
public List<object> List { get; set; } = new List<object>();
}
program:
public static void main(string[] args)
{
Request request = new Request();
request.header.CZLX = "CZLX";
request.header.TYPE = "TYPE";
PayRequest output = new PayRequest();
output.Body = "dsd";
output.Je = 20.36M;
request.Body = output;
string xmlStr = XmlUtil.XmlSerialize(request);
}
public static string XmlSerialize<TModel>(TModel obj)
{
using (StringWriter sw = new StringWriter())
{
Type t = obj.GetType();
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
serializer.Serialize(sw, obj);
sw.Close();
return sw.ToString();
}
}