在过去一天左右,我一直在将我的应用程序从netcoreapp1.0
升级到.NET Core net451
。大多数过程都非常顺利,所有内容都被移植到我看到的第一个问题上。
我正在使用System.Xml
和System.Xml.Serialization
从API端点(我完全无法控制)序列化XML。它运行良好,但是,由于XML的问题,总有一个属性作为UnknownAttribute
返回。我通过连接到UknownAttribute
事件来处理它,如下所示:
XmlReader reader = XmlReader.Create(stream);
var serializer = new XmlSerializer(typeof(PersonDetails));
var personDetails = (PersonDetails)serializer.Deserialize(reader);
serializer.UnknownAttribute += new XmlAttributeEventHandler((object sender, XmlAttributeEventArgs e) => {
unknownAttr.Add(e.Attr.Name, e.Attr.Value);
});
// Handle the missing map value if it exists.
string addressValue;
if(unknownAttr.TryGetValue("Address_x0_", out addressValue))
{
personDetails.Address = addressValue;
}
升级到.NET Core后,我现在使用System.Xml.XmlSerializer 4.0.11库。现在,似乎UnknownAttribute事件不再是XmlSerializer
的一部分。我一直无法找到处理未知属性的另一种方法,并且会欣赏指向正确方向的指针。
答案 0 :(得分:2)
您可以向public XmlAttribute[] XmlAttributes
添加PersonDetails
属性,使用[XmlAnyAttribute]
标记,并在那里处理未知属性,而不是使用未知属性事件:
public class PersonDetails
{
[XmlAttribute]
public string Address { get; set; }
[XmlAnyAttribute]
public XmlAttribute[] XmlAttributes
{
get
{
return null;
}
set
{
if (value != null)
{
foreach (var attr in value)
if (attr.Name == "Address_x0_")
Address = attr.Value;
}
}
}
}
如您所见,您需要添加https://www.nuget.org/packages/System.Xml.XmlDocument/才能在.NET Core中使用XmlAttribute
。