forked from loafle/openapi-generator-original
[csharp] Constructor handling for serialization
Resolving an issue with serializing classes that contain required properties. When the only constructor has defaulted parameters, no parameterless constructor is generated but JSON.Net attempts to call the missing constructor on deserialization (because of DataContract). See: https://manski.net/2014/10/net-serializers-comparison-chart/ The fix here is to create a protected constructor, annotate it with JsonConstructorAttribute to inform JSON.Net it is the constructor to use during serialization, then provide settings that explicitly allow JSON.Net to access non-public constructors during serialiazation.
This commit is contained in:
@@ -27,7 +27,7 @@ public class CodegenModel {
|
||||
public Set<String> allMandatory;
|
||||
|
||||
public Set<String> imports = new TreeSet<String>();
|
||||
public Boolean hasVars, emptyVars, hasMoreModels, hasEnums, isEnum;
|
||||
public Boolean hasVars, emptyVars, hasMoreModels, hasEnums, isEnum, hasRequired;
|
||||
public ExternalDocs externalDocs;
|
||||
|
||||
public Map<String, Object> vendorExtensions;
|
||||
|
||||
@@ -2432,6 +2432,7 @@ public class DefaultCodegen {
|
||||
private void addVars(CodegenModel m, Map<String, Property> properties, List<String> required,
|
||||
Map<String, Property> allProperties, List<String> allRequired) {
|
||||
|
||||
m.hasRequired = false;
|
||||
if (properties != null && !properties.isEmpty()) {
|
||||
m.hasVars = true;
|
||||
m.hasEnums = false;
|
||||
@@ -2470,6 +2471,7 @@ public class DefaultCodegen {
|
||||
} else {
|
||||
final CodegenProperty cp = fromProperty(key, prop);
|
||||
cp.required = mandatory.contains(key) ? true : null;
|
||||
m.hasRequired = Boolean.TRUE.equals(m.hasRequired) || Boolean.TRUE.equals(cp.required);
|
||||
if (cp.isEnum) {
|
||||
// FIXME: if supporting inheritance, when called a second time for allProperties it is possible for
|
||||
// m.hasEnums to be set incorrectly if allProperties has enumerations but properties does not.
|
||||
|
||||
Reference in New Issue
Block a user