c# - 格式化程序错误:Windows 更新后尝试反序列化参数时出错
问题描述
我有一个 WCF 请求,在某些 Windows 更新之前工作正常。之后我收到此错误,我无法找到解决方法。
错误是:尝试反序列化参数http://tempuri.org/:CommandRequestResult时出错。有关更多详细信息,请参阅 InnerException。
InnerException:此处不允许键入“NEntities.IPAElement,NEntities,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2132227。
这里我的类 IPAElement 和里面包含的枚举。即使我用字符串更改枚举,我仍然会遇到同样的错误,所以这不应该是问题
[Serializable()]
[DataContract(IsReference = true)]
public class IPAElement//:ISerializable
{
public IPAElement(List<string> bodyElNames, List<ElementType> bodyElTypes)
{
BodyElement = bodyElNames;
BodyRowElementType = bodyElTypes;
}
public IPAElement()
{ }
[DataMember]
public List<string> HeaderElement;
[DataMember]
public List<string> BodyElement;
[DataMember]
public List<string> FooterElement;
[DataMember]
public List<ElementType> HeaderRowElementType;
[DataMember]
public List<ElementType> BodyRowElementType;
[DataMember]
public List<ElementType> FooterRowElementType;
}
[可序列化]
公共枚举元素类型
{
[XmlEnum("1")]
ElementName = 1,
[XmlEnum("2")]
Material = 2,
[XmlEnum("3")]
MaterialColor = 3,
[XmlEnum("4")]
Notes_1 = 4,
[XmlEnum("5")]
Notes_2 = 5,
[XmlEnum("6")]
Notes_3 = 6,
};
关于如何解决它的任何想法?谢谢安德里亚
解决方案
这是由 Windows 更新 KB4565633 中的安全修复程序引起的。
在检查您的用例不受安全漏洞影响后,您可能会需要这个:
AppDomain.CurrentDomain.SetData("System.Data.DataSetDefaultAllowedTypes", typeof(IPAElement));
从表面上看IPAElement
,无论中间的邪恶人(或邪恶来源)在序列化内容中包含什么内容,您都不会在反序列化时导致执行任意代码,所以这种修复应该在您的特定用例中足够安全。(如果您没有提供审查,我将无法ElementType
说这么多;而且我仍然只是猜测DataMemberAttribute
通常情况下是这样。)
但是,您不应该相信我的话,如果您的应用程序应该关心安全性,您应该阅读漏洞并得出自己的结论,然后再决定解锁 Microsoft 选择锁定的门。
推荐阅读
- javascript - 如何在新的小 div 中打开 window.open 而不是全屏?
- swift - 如何在 MacOS 的 SwiftUI 中创建多行文本字段?
- c - C中的字符串向量打印错误的字符串
- c# - LinqToDB 关系返回 null
- javascript - 可以用 innerHTML 方法插入 React JSX吗?
- swift - Swift 卡片 UI 设计
- reactjs - 在不同的路线上运行 SPA
- c# - 我无法使用 Visual Studio 2019 在 C# 中转换为双精度
- apache - 多线程如何影响 http keep-alive 连接?
- javascript - 如何使用 JS 在不同的 HTML 页面之间导航