[csharp] Update JsonSubTypes to 1.1.3 and use nuget dependency (#6969)

* the result I want to obtain

* add csharp-petstore-net-40.bat for windows

* just ran bin\windows\csharp-petstore-all.bat

* Removed those directories:
- samples\client\petstore\csharp
- samples\client\petstore\csharp-dotnet2

then ran :
bin\windows\csharp-petstore-all.bat

* - update JsonSubTypes to 1.1.3 by using nuget dependency (the package is compatible with net40)
- allign all version of Newtonsoft.Json to 10.0.3

* the result of bin\windows\csharp-petstore-all.bat

* ran bin\security\windows\csharp-petstore.bat
This commit is contained in:
manuc66
2017-11-21 04:26:58 +01:00
committed by William Cheng
parent 0c3688227a
commit b06ccec11e
234 changed files with 2545 additions and 5874 deletions

View File

@@ -52,6 +52,12 @@ Contact: apiteam@swagger.io
<HintPath Condition="Exists('..\..\packages')">..\..\packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<HintPath Condition="Exists('..\..\vendor')">..\..\vendor\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="JsonSubTypes">
<HintPath Condition="Exists('$(SolutionDir)\packages')">$(SolutionDir)\packages\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
<HintPath Condition="Exists('..\packages')">..\packages\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
<HintPath Condition="Exists('..\..\packages')">..\..\packages\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
<HintPath Condition="Exists('..\..\vendor')">..\..\vendor\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
</Reference>
<Reference Include="RestSharp">
<HintPath Condition="Exists('$(SolutionDir)\packages')">$(SolutionDir)\packages\RestSharp.105.1.0\lib\net4\RestSharp.dll</HintPath>
<HintPath Condition="Exists('..\packages')">..\packages\RestSharp.105.1.0\lib\net4\RestSharp.dll</HintPath>

View File

@@ -3,4 +3,5 @@
<package id="NUnit" version="2.6.4" targetFramework="net40" />
<package id="RestSharp" version="105.1.0" targetFramework="net4" developmentDependency="true" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net40" developmentDependency="true" />
<package id="JsonSubTypes" version="1.1.3" targetFramework="net40" developmentDependency="true" />
</packages>

View File

@@ -1,272 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace JsonSubTypes
{
// Copied from project https://github.com/manuc66/JsonSubTypes
// https://raw.githubusercontent.com/manuc66/JsonSubTypes/07403192ea3f4959f6d42f5966ac56ceb0d6095b/JsonSubTypes/JsonSubtypes.cs
public class JsonSubtypes : JsonConverter
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)]
public class KnownSubTypeAttribute : Attribute
{
public Type SubType { get; private set; }
public object AssociatedValue { get; private set; }
public KnownSubTypeAttribute(Type subType, object associatedValue)
{
SubType = subType;
AssociatedValue = associatedValue;
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)]
public class KnownSubTypeWithPropertyAttribute : Attribute
{
public Type SubType { get; private set; }
public string PropertyName { get; private set; }
public KnownSubTypeWithPropertyAttribute(Type subType, string propertyName)
{
SubType = subType;
PropertyName = propertyName;
}
}
private readonly string _typeMappingPropertyName;
private bool _isInsideRead;
private JsonReader _reader;
public override bool CanRead
{
get
{
if (!_isInsideRead)
return true;
return !string.IsNullOrEmpty(_reader.Path);
}
}
public sealed override bool CanWrite
{
get { return false; }
}
public JsonSubtypes()
{
}
public JsonSubtypes(string typeMappingPropertyName)
{
_typeMappingPropertyName = typeMappingPropertyName;
}
public override bool CanConvert(Type objectType)
{
return _typeMappingPropertyName != null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Comment)
reader.Read();
switch (reader.TokenType)
{
case JsonToken.Null:
return null;
case JsonToken.StartArray:
return ReadArray(reader, objectType, serializer);
case JsonToken.StartObject:
return ReadObject(reader, objectType, serializer);
default:
throw new Exception("Array: Unrecognized token: " + reader.TokenType);
}
}
private IList ReadArray(JsonReader reader, Type targetType, JsonSerializer serializer)
{
var elementType = GetElementType(targetType);
var list = CreateCompatibleList(targetType, elementType);
while (reader.TokenType != JsonToken.EndArray && reader.Read())
{
switch (reader.TokenType)
{
case JsonToken.Null:
list.Add(reader.Value);
break;
case JsonToken.Comment:
break;
case JsonToken.StartObject:
list.Add(ReadObject(reader, elementType, serializer));
break;
case JsonToken.EndArray:
break;
default:
throw new Exception("Array: Unrecognized token: " + reader.TokenType);
}
}
if (targetType.IsArray)
{
var array = Array.CreateInstance(targetType.GetElementType(), list.Count);
list.CopyTo(array, 0);
list = array;
}
return list;
}
private static IList CreateCompatibleList(Type targetContainerType, Type elementType)
{
IList list;
if (targetContainerType.IsArray || targetContainerType.IsAbstract)
{
list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(elementType));
}
else
{
list = (IList)Activator.CreateInstance(targetContainerType);
}
return list;
}
private static Type GetElementType(Type arrayOrGenericContainer)
{
Type elementType;
if (arrayOrGenericContainer.IsArray)
{
elementType = arrayOrGenericContainer.GetElementType();
}
else
{
elementType = arrayOrGenericContainer.GetGenericArguments().FirstOrDefault();
}
return elementType;
}
private object ReadObject(JsonReader reader, Type objectType, JsonSerializer serializer)
{
var jObject = JObject.Load(reader);
var targetType = GetType(jObject, objectType) ?? objectType;
return _ReadJson(CreateAnotherReader(jObject, reader), targetType, null, serializer);
}
private static JsonReader CreateAnotherReader(JObject jObject, JsonReader reader)
{
var jObjectReader = jObject.CreateReader();
jObjectReader.Culture = reader.Culture;
jObjectReader.CloseInput = reader.CloseInput;
jObjectReader.SupportMultipleContent = reader.SupportMultipleContent;
jObjectReader.DateTimeZoneHandling = reader.DateTimeZoneHandling;
jObjectReader.FloatParseHandling = reader.FloatParseHandling;
jObjectReader.DateFormatString = reader.DateFormatString;
jObjectReader.DateParseHandling = reader.DateParseHandling;
return jObjectReader;
}
public Type GetType(JObject jObject, Type parentType)
{
if (_typeMappingPropertyName == null)
{
return GetTypeByPropertyPresence(jObject, parentType);
}
return GetTypeFromDiscriminatorValue(jObject, parentType);
}
private static Type GetTypeByPropertyPresence(JObject jObject, Type parentType)
{
foreach (var type in parentType.GetCustomAttributes(false).OfType<KnownSubTypeWithPropertyAttribute>())
{
JToken ignore;
if (jObject.TryGetValue(type.PropertyName, out ignore))
{
return type.SubType;
}
}
return null;
}
private Type GetTypeFromDiscriminatorValue(JObject jObject, Type parentType)
{
JToken jToken;
if (!jObject.TryGetValue(_typeMappingPropertyName, out jToken)) return null;
var discriminatorValue = jToken.ToObject<object>();
if (discriminatorValue == null) return null;
var typeMapping = GetSubTypeMapping(parentType);
if (typeMapping.Any())
{
return GetTypeFromMapping(typeMapping, discriminatorValue);
}
return GetTypeByName(discriminatorValue as string, parentType);
}
private static Type GetTypeByName(string typeName, Type parentType)
{
if (typeName == null)
return null;
var insideAssembly = parentType.Assembly;
var typeByName = insideAssembly.GetType(typeName);
if (typeByName == null)
{
var searchLocation = parentType.FullName.Substring(0, parentType.FullName.Length - parentType.Name.Length);
typeByName = insideAssembly.GetType(searchLocation + typeName, false, true);
}
return typeByName;
}
private static Type GetTypeFromMapping(IDictionary<object, Type> typeMapping, object discriminatorValue)
{
var targetlookupValueType = typeMapping.First().Key.GetType();
var lookupValue = ConvertJsonValueToType(discriminatorValue, targetlookupValueType);
Type targetType;
return typeMapping.TryGetValue(lookupValue, out targetType) ? targetType : null;
}
private static Dictionary<object, Type> GetSubTypeMapping(Type type)
{
return type.GetCustomAttributes(false).OfType<KnownSubTypeAttribute>().ToDictionary(x => x.AssociatedValue, x => x.SubType);
}
private static object ConvertJsonValueToType(object objectType, Type targetlookupValueType)
{
if (targetlookupValueType.IsEnum)
return Enum.ToObject(targetlookupValueType, objectType);
return Convert.ChangeType(objectType, targetlookupValueType);
}
protected object _ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
_reader = reader;
_isInsideRead = true;
try
{
return serializer.Deserialize(reader, objectType);
}
finally
{
_isInsideRead = false;
}
}
}
}

View File

@@ -53,6 +53,12 @@ Contact: apiteam@swagger.io
<HintPath Condition="Exists('..\..\packages')">..\..\packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
<HintPath Condition="Exists('..\..\vendor')">..\..\vendor\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="JsonSubTypes">
<HintPath Condition="Exists('$(SolutionDir)\packages')">$(SolutionDir)\packages\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
<HintPath Condition="Exists('..\packages')">..\packages\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
<HintPath Condition="Exists('..\..\packages')">..\..\packages\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
<HintPath Condition="Exists('..\..\vendor')">..\..\vendor\JsonSubTypes.1.1.3\lib\net40\JsonSubTypes.dll</HintPath>
</Reference>
<Reference Include="RestSharp">
<HintPath Condition="Exists('$(SolutionDir)\packages')">$(SolutionDir)\packages\RestSharp.105.1.0\lib\net4\RestSharp.dll</HintPath>
<HintPath Condition="Exists('..\packages')">..\packages\RestSharp.105.1.0\lib\net4\RestSharp.dll</HintPath>

View File

@@ -41,16 +41,20 @@ namespace IO.Swagger.Model
/// Enum GreaterThanOrEqualTo for ">="
/// </summary>
[EnumMember(Value = ">=")]
GreaterThanOrEqualTo,
GreaterThanOrEqualTo = 1,
/// <summary>
/// Enum Dollar for "$"
/// </summary>
[EnumMember(Value = "$")]
Dollar
Dollar = 2
}
/// <summary>
/// Gets or Sets JustSymbol
/// </summary>
[DataMember(Name="just_symbol", EmitDefaultValue=false)]
public JustSymbolEnum? JustSymbol { get; set; }
/// <summary>
/// Gets or Sets ArrayEnum
/// </summary>
@@ -62,20 +66,16 @@ namespace IO.Swagger.Model
/// Enum Fish for "fish"
/// </summary>
[EnumMember(Value = "fish")]
Fish,
Fish = 1,
/// <summary>
/// Enum Crab for "crab"
/// </summary>
[EnumMember(Value = "crab")]
Crab
Crab = 2
}
/// <summary>
/// Gets or Sets JustSymbol
/// </summary>
[DataMember(Name="just_symbol", EmitDefaultValue=false)]
public JustSymbolEnum? JustSymbol { get; set; }
/// <summary>
/// Gets or Sets ArrayEnum
/// </summary>

View File

@@ -35,19 +35,19 @@ namespace IO.Swagger.Model
/// Enum Abc for "_abc"
/// </summary>
[EnumMember(Value = "_abc")]
Abc,
Abc = 1,
/// <summary>
/// Enum Efg for "-efg"
/// </summary>
[EnumMember(Value = "-efg")]
Efg,
Efg = 2,
/// <summary>
/// Enum Xyz for "(xyz)"
/// </summary>
[EnumMember(Value = "(xyz)")]
Xyz
Xyz = 3
}
}

View File

@@ -41,21 +41,26 @@ namespace IO.Swagger.Model
/// Enum UPPER for "UPPER"
/// </summary>
[EnumMember(Value = "UPPER")]
UPPER,
UPPER = 1,
/// <summary>
/// Enum Lower for "lower"
/// </summary>
[EnumMember(Value = "lower")]
Lower,
Lower = 2,
/// <summary>
/// Enum Empty for ""
/// </summary>
[EnumMember(Value = "")]
Empty
Empty = 3
}
/// <summary>
/// Gets or Sets EnumString
/// </summary>
[DataMember(Name="enum_string", EmitDefaultValue=false)]
public EnumStringEnum? EnumString { get; set; }
/// <summary>
/// Gets or Sets EnumInteger
/// </summary>
@@ -76,6 +81,11 @@ namespace IO.Swagger.Model
NUMBER_MINUS_1 = -1
}
/// <summary>
/// Gets or Sets EnumInteger
/// </summary>
[DataMember(Name="enum_integer", EmitDefaultValue=false)]
public EnumIntegerEnum? EnumInteger { get; set; }
/// <summary>
/// Gets or Sets EnumNumber
/// </summary>
@@ -87,38 +97,33 @@ namespace IO.Swagger.Model
/// Enum NUMBER_1_DOT_1 for 1.1
/// </summary>
[EnumMember(Value = "1.1")]
NUMBER_1_DOT_1,
NUMBER_1_DOT_1 = 1,
/// <summary>
/// Enum NUMBER_MINUS_1_DOT_2 for -1.2
/// </summary>
[EnumMember(Value = "-1.2")]
NUMBER_MINUS_1_DOT_2
NUMBER_MINUS_1_DOT_2 = 2
}
/// <summary>
/// Gets or Sets EnumString
/// </summary>
[DataMember(Name="enum_string", EmitDefaultValue=false)]
public EnumStringEnum? EnumString { get; set; }
/// <summary>
/// Gets or Sets EnumInteger
/// </summary>
[DataMember(Name="enum_integer", EmitDefaultValue=false)]
public EnumIntegerEnum? EnumInteger { get; set; }
/// <summary>
/// Gets or Sets EnumNumber
/// </summary>
[DataMember(Name="enum_number", EmitDefaultValue=false)]
public EnumNumberEnum? EnumNumber { get; set; }
/// <summary>
/// Gets or Sets OuterEnum
/// </summary>
[DataMember(Name="outerEnum", EmitDefaultValue=false)]
public OuterEnum? OuterEnum { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="EnumTest" /> class.
/// </summary>
/// <param name="EnumString">EnumString.</param>
/// <param name="EnumInteger">EnumInteger.</param>
/// <param name="EnumNumber">EnumNumber.</param>
/// <param name="OuterEnum">OuterEnum.</param>
public EnumTest(EnumStringEnum? EnumString = default(EnumStringEnum?), EnumIntegerEnum? EnumInteger = default(EnumIntegerEnum?), EnumNumberEnum? EnumNumber = default(EnumNumberEnum?), OuterEnum OuterEnum = default(OuterEnum))
public EnumTest(EnumStringEnum? EnumString = default(EnumStringEnum?), EnumIntegerEnum? EnumInteger = default(EnumIntegerEnum?), EnumNumberEnum? EnumNumber = default(EnumNumberEnum?), OuterEnum? OuterEnum = default(OuterEnum?))
{
this.EnumString = EnumString;
this.EnumInteger = EnumInteger;
@@ -129,11 +134,6 @@ namespace IO.Swagger.Model
/// <summary>
/// Gets or Sets OuterEnum
/// </summary>
[DataMember(Name="outerEnum", EmitDefaultValue=false)]
public OuterEnum OuterEnum { get; set; }
/// <summary>
/// Returns the string presentation of the object

View File

@@ -30,7 +30,6 @@ namespace IO.Swagger.Model
[DataContract]
public partial class MapTest : IEquatable<MapTest>, IValidatableObject
{
/// <summary>
/// Gets or Sets Inner
/// </summary>
@@ -42,15 +41,16 @@ namespace IO.Swagger.Model
/// Enum UPPER for "UPPER"
/// </summary>
[EnumMember(Value = "UPPER")]
UPPER,
UPPER = 1,
/// <summary>
/// Enum Lower for "lower"
/// </summary>
[EnumMember(Value = "lower")]
Lower
Lower = 2
}
/// <summary>
/// Gets or Sets MapOfEnumString
/// </summary>

View File

@@ -42,19 +42,19 @@ namespace IO.Swagger.Model
/// Enum Placed for "placed"
/// </summary>
[EnumMember(Value = "placed")]
Placed,
Placed = 1,
/// <summary>
/// Enum Approved for "approved"
/// </summary>
[EnumMember(Value = "approved")]
Approved,
Approved = 2,
/// <summary>
/// Enum Delivered for "delivered"
/// </summary>
[EnumMember(Value = "delivered")]
Delivered
Delivered = 3
}
/// <summary>

View File

@@ -35,19 +35,19 @@ namespace IO.Swagger.Model
/// Enum Placed for "placed"
/// </summary>
[EnumMember(Value = "placed")]
Placed,
Placed = 1,
/// <summary>
/// Enum Approved for "approved"
/// </summary>
[EnumMember(Value = "approved")]
Approved,
Approved = 2,
/// <summary>
/// Enum Delivered for "delivered"
/// </summary>
[EnumMember(Value = "delivered")]
Delivered
Delivered = 3
}
}

View File

@@ -42,19 +42,19 @@ namespace IO.Swagger.Model
/// Enum Available for "available"
/// </summary>
[EnumMember(Value = "available")]
Available,
Available = 1,
/// <summary>
/// Enum Pending for "pending"
/// </summary>
[EnumMember(Value = "pending")]
Pending,
Pending = 2,
/// <summary>
/// Enum Sold for "sold"
/// </summary>
[EnumMember(Value = "sold")]
Sold
Sold = 3
}
/// <summary>

View File

@@ -2,4 +2,5 @@
<packages>
<package id="RestSharp" version="105.1.0" targetFramework="net4" developmentDependency="true" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net40" developmentDependency="true" />
<package id="JsonSubTypes" version="1.1.3" targetFramework="net40" developmentDependency="true" />
</packages>