mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-12 02:16:23 +00:00
Nullability, updated version
This commit is contained in:
parent
dd06f48fc1
commit
7a54625bb5
@ -109,7 +109,7 @@ namespace CryptoExchange.Net.Authentication
|
|||||||
{
|
{
|
||||||
if (data[key] == null)
|
if (data[key] == null)
|
||||||
return null;
|
return null;
|
||||||
return (string) data[key];
|
return (string) data[key]!;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -297,7 +297,8 @@ namespace CryptoExchange.Net
|
|||||||
if (ignore != null)
|
if (ignore != null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
properties.Add(attr == null ? prop.Name : ((JsonPropertyAttribute)attr).PropertyName);
|
var propertyName = ((JsonPropertyAttribute?) attr)?.PropertyName;
|
||||||
|
properties.Add(propertyName ?? prop.Name);
|
||||||
}
|
}
|
||||||
foreach (var token in obj)
|
foreach (var token in obj)
|
||||||
{
|
{
|
||||||
@ -319,12 +320,12 @@ namespace CryptoExchange.Net
|
|||||||
properties.Remove(d);
|
properties.Remove(d);
|
||||||
|
|
||||||
var propType = GetProperty(d, props)?.PropertyType;
|
var propType = GetProperty(d, props)?.PropertyType;
|
||||||
if (propType == null)
|
if (propType == null || token.Value == null)
|
||||||
continue;
|
continue;
|
||||||
if (!IsSimple(propType) && propType != typeof(DateTime))
|
if (!IsSimple(propType) && propType != typeof(DateTime))
|
||||||
{
|
{
|
||||||
if (propType.IsArray && token.Value.HasValues && ((JArray)token.Value).Any() && ((JArray)token.Value)[0] is JObject)
|
if (propType.IsArray && token.Value.HasValues && ((JArray)token.Value).Any() && ((JArray)token.Value)[0] is JObject)
|
||||||
CheckObject(propType.GetElementType(), (JObject)token.Value[0], requestId);
|
CheckObject(propType.GetElementType()!, (JObject)token.Value[0]!, requestId);
|
||||||
else if (token.Value is JObject o)
|
else if (token.Value is JObject o)
|
||||||
CheckObject(propType, o, requestId);
|
CheckObject(propType, o, requestId);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override object? ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
if (objectType == typeof(JToken))
|
if (objectType == typeof(JToken))
|
||||||
return JToken.Load(reader);
|
return JToken.Load(reader);
|
||||||
@ -115,8 +115,11 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
|
if (value == null)
|
||||||
|
return;
|
||||||
|
|
||||||
writer.WriteStartArray();
|
writer.WriteStartArray();
|
||||||
var props = value.GetType().GetProperties();
|
var props = value.GetType().GetProperties();
|
||||||
var ordered = props.OrderBy(p => p.GetCustomAttribute<ArrayPropertyAttribute>()?.Index);
|
var ordered = props.OrderBy(p => p.GetCustomAttribute<ArrayPropertyAttribute>()?.Index);
|
||||||
|
@ -28,9 +28,9 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
var stringValue = GetValue((T) value);
|
var stringValue = value == null? null: GetValue((T) value);
|
||||||
if (quotes)
|
if (quotes)
|
||||||
writer.WriteValue(stringValue);
|
writer.WriteValue(stringValue);
|
||||||
else
|
else
|
||||||
@ -38,7 +38,7 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override object? ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
if (reader.Value == null)
|
if (reader.Value == null)
|
||||||
return null;
|
return null;
|
||||||
|
@ -15,7 +15,7 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override object? ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
if (reader.Value == null)
|
if (reader.Value == null)
|
||||||
return null;
|
return null;
|
||||||
@ -25,9 +25,12 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
writer.WriteValue((long)Math.Round(((DateTime)value - new DateTime(1970, 1, 1)).TotalMilliseconds));
|
if(value == null)
|
||||||
|
writer.WriteValue((DateTime?)null);
|
||||||
|
else
|
||||||
|
writer.WriteValue((long)Math.Round(((DateTime)value - new DateTime(1970, 1, 1)).TotalMilliseconds));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override object? ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
if (reader.Value == null)
|
if (reader.Value == null)
|
||||||
return null;
|
return null;
|
||||||
@ -27,9 +27,9 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
writer.WriteValue((long)Math.Round(((DateTime)value - new DateTime(1970, 1, 1)).Ticks / ticksPerNanosecond));
|
writer.WriteValue((long)Math.Round(((DateTime)value! - new DateTime(1970, 1, 1)).Ticks / ticksPerNanosecond));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override object? ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
if (reader.Value == null)
|
if (reader.Value == null)
|
||||||
return null;
|
return null;
|
||||||
@ -29,9 +29,12 @@ namespace CryptoExchange.Net.Converters
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
writer.WriteValue((long)Math.Round(((DateTime)value - new DateTime(1970, 1, 1)).TotalSeconds));
|
if (value == null)
|
||||||
|
writer.WriteValue((DateTime?)null);
|
||||||
|
else
|
||||||
|
writer.WriteValue((long)Math.Round(((DateTime)value! - new DateTime(1970, 1, 1)).TotalSeconds));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,20 +9,20 @@ namespace CryptoExchange.Net.Converters
|
|||||||
public class UTCDateTimeConverter: JsonConverter
|
public class UTCDateTimeConverter: JsonConverter
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
writer.WriteValue(JsonConvert.SerializeObject(value));
|
writer.WriteValue(JsonConvert.SerializeObject(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override object? ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
if (reader.Value == null)
|
if (reader.Value == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
DateTime value;
|
DateTime value;
|
||||||
if (reader.Value is string s)
|
if (reader.Value is string s)
|
||||||
value = (DateTime)JsonConvert.DeserializeObject(s);
|
value = (DateTime)JsonConvert.DeserializeObject(s)!;
|
||||||
else
|
else
|
||||||
value = (DateTime) reader.Value;
|
value = (DateTime) reader.Value;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
|
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@ -6,13 +6,13 @@
|
|||||||
<PackageId>CryptoExchange.Net</PackageId>
|
<PackageId>CryptoExchange.Net</PackageId>
|
||||||
<Authors>JKorf</Authors>
|
<Authors>JKorf</Authors>
|
||||||
<Description>A base package for implementing cryptocurrency exchange API's</Description>
|
<Description>A base package for implementing cryptocurrency exchange API's</Description>
|
||||||
<PackageVersion>3.2.1</PackageVersion>
|
<PackageVersion>3.3.0</PackageVersion>
|
||||||
<AssemblyVersion>3.2.0</AssemblyVersion>
|
<AssemblyVersion>3.3.0</AssemblyVersion>
|
||||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||||
<PackageProjectUrl>https://github.com/JKorf/CryptoExchange.Net</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/JKorf/CryptoExchange.Net</PackageProjectUrl>
|
||||||
<NeutralLanguage>en</NeutralLanguage>
|
<NeutralLanguage>en</NeutralLanguage>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<PackageReleaseNotes>3.2.1 - Fixed error code parsing</PackageReleaseNotes>
|
<PackageReleaseNotes>3.3.0 - Added client name, Added common interfaces, Fixed api key plain text storing in RateLimitterApiKey</PackageReleaseNotes>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>8.0</LangVersion>
|
<LangVersion>8.0</LangVersion>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
|
@ -1636,9 +1636,7 @@
|
|||||||
<summary>
|
<summary>
|
||||||
Create an error result
|
Create an error result
|
||||||
</summary>
|
</summary>
|
||||||
<param name="code"></param>
|
<param name="result"></param>
|
||||||
<param name="responseHeaders"></param>
|
|
||||||
<param name="error"></param>
|
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:CryptoExchange.Net.Objects.WebCallResult`1">
|
<member name="T:CryptoExchange.Net.Objects.WebCallResult`1">
|
||||||
@ -1666,6 +1664,20 @@
|
|||||||
<param name="data"></param>
|
<param name="data"></param>
|
||||||
<param name="error"></param>
|
<param name="error"></param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:CryptoExchange.Net.Objects.WebCallResult`1.#ctor(CryptoExchange.Net.Objects.WebCallResult{`0})">
|
||||||
|
<summary>
|
||||||
|
Create new based on existing
|
||||||
|
</summary>
|
||||||
|
<param name="callResult"></param>
|
||||||
|
</member>
|
||||||
|
<member name="M:CryptoExchange.Net.Objects.WebCallResult`1.CreateFrom``1(CryptoExchange.Net.Objects.WebCallResult{``0})">
|
||||||
|
<summary>
|
||||||
|
Create from a call result
|
||||||
|
</summary>
|
||||||
|
<typeparam name="Y"></typeparam>
|
||||||
|
<param name="source"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.Objects.WebCallResult`1.CreateErrorResult(System.Nullable{System.Net.HttpStatusCode},System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.Collections.Generic.IEnumerable{System.String}}},CryptoExchange.Net.Objects.Error)">
|
<member name="M:CryptoExchange.Net.Objects.WebCallResult`1.CreateErrorResult(System.Nullable{System.Net.HttpStatusCode},System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.Collections.Generic.IEnumerable{System.String}}},CryptoExchange.Net.Objects.Error)">
|
||||||
<summary>
|
<summary>
|
||||||
Create an error result
|
Create an error result
|
||||||
|
@ -158,9 +158,7 @@ namespace CryptoExchange.Net.Objects
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create an error result
|
/// Create an error result
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="code"></param>
|
/// <param name="result"></param>
|
||||||
/// <param name="responseHeaders"></param>
|
|
||||||
/// <param name="error"></param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static WebCallResult CreateErrorResult(WebCallResult result)
|
public static WebCallResult CreateErrorResult(WebCallResult result)
|
||||||
{
|
{
|
||||||
@ -199,12 +197,22 @@ namespace CryptoExchange.Net.Objects
|
|||||||
ResponseHeaders = responseHeaders;
|
ResponseHeaders = responseHeaders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create new based on existing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="callResult"></param>
|
||||||
public WebCallResult(WebCallResult<T> callResult): base(callResult.Data, callResult.Error)
|
public WebCallResult(WebCallResult<T> callResult): base(callResult.Data, callResult.Error)
|
||||||
{
|
{
|
||||||
ResponseHeaders = callResult.ResponseHeaders;
|
ResponseHeaders = callResult.ResponseHeaders;
|
||||||
ResponseStatusCode = callResult.ResponseStatusCode;
|
ResponseStatusCode = callResult.ResponseStatusCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create from a call result
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="Y"></typeparam>
|
||||||
|
/// <param name="source"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public static WebCallResult<T> CreateFrom<Y>(WebCallResult<Y> source) where Y : T
|
public static WebCallResult<T> CreateFrom<Y>(WebCallResult<Y> source) where Y : T
|
||||||
{
|
{
|
||||||
return new WebCallResult<T>(source.ResponseStatusCode, source.ResponseHeaders, (T)source.Data, source.Error);
|
return new WebCallResult<T>(source.ResponseStatusCode, source.ResponseHeaders, (T)source.Data, source.Error);
|
||||||
|
@ -203,6 +203,11 @@ The order book will automatically reconnect when the connection is lost and resy
|
|||||||
To stop synchronizing an order book use the `Stop` method.
|
To stop synchronizing an order book use the `Stop` method.
|
||||||
|
|
||||||
## Release notes
|
## Release notes
|
||||||
|
* Version 3.3.0 - 10 dec 2020
|
||||||
|
* Added client name
|
||||||
|
* Added common interfaces
|
||||||
|
* Fixed api key plain text storing in RateLimitterApiKey
|
||||||
|
|
||||||
* Version 3.2.1 - 19 nov 2020
|
* Version 3.2.1 - 19 nov 2020
|
||||||
* Fixed error code parsing
|
* Fixed error code parsing
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user