== How to fix it in .NET === Code examples The following code is vulnerable to deserialization attacks because it deserializes HTTP data without validating it first. ==== Noncompliant code example [source,csharp,diff-id=1,diff-type=noncompliant] ---- public class Example : Controller { [HttpPost] public ActionResult Deserialize(HttpPostedFileBase inputFile) { ExpectedType expectedObject = null; var formatter = new BinaryFormatter(); expectedObject = (ExpectedType)formatter.Deserialize(inputFile.InputStream); } } ---- ==== Compliant solution [source,csharp,diff-id=1,diff-type=compliant] ---- public class Example : Controller { [HttpPost] public ActionResult Deserialize(HttpPostedFileBase inputFile) { ExpectedType expectedObject = null; JsonSerializer serializer = new JsonSerializer(typeof(expectedObject)); expectedObject = (ExpectedType)serializer.Deserialize(inputFile.InputStream); } } ---- === How does this work? include::../../common/fix/introduction.adoc[] include::../../common/fix/safer-serialization.adoc[] include::../../common/fix/integrity-check.adoc[] include::../../common/fix/pre-approved-list.adoc[] In the code samples, a pre-approved class is used natively by JsonSerializer to validate the class during serialization. XmlSerializer also provides this capability. + **Note**: The pre-approved class should not tamper with the application's inner workings. The following native types are considered unsafe because they do not provide these capabilities: * `BinaryFormatter` * `SoapFormatter` * `NetDataContractSerializer` * `LosFormatter` * `ObjectStateFormatter`