1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-10 17:36:19 +00:00

Nullability, updated version

This commit is contained in:
Jkorf 2020-12-10 15:21:10 +01:00
parent dd06f48fc1
commit 7a54625bb5
12 changed files with 66 additions and 31 deletions

View File

@ -109,7 +109,7 @@ namespace CryptoExchange.Net.Authentication
{
if (data[key] == null)
return null;
return (string) data[key];
return (string) data[key]!;
}
/// <summary>

View File

@ -297,7 +297,8 @@ namespace CryptoExchange.Net
if (ignore != null)
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)
{
@ -319,12 +320,12 @@ namespace CryptoExchange.Net
properties.Remove(d);
var propType = GetProperty(d, props)?.PropertyType;
if (propType == null)
if (propType == null || token.Value == null)
continue;
if (!IsSimple(propType) && propType != typeof(DateTime))
{
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)
CheckObject(propType, o, requestId);
}

View File

@ -21,7 +21,7 @@ namespace CryptoExchange.Net.Converters
}
/// <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))
return JToken.Load(reader);
@ -115,8 +115,11 @@ namespace CryptoExchange.Net.Converters
}
/// <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();
var props = value.GetType().GetProperties();
var ordered = props.OrderBy(p => p.GetCustomAttribute<ArrayPropertyAttribute>()?.Index);

View File

@ -28,9 +28,9 @@ namespace CryptoExchange.Net.Converters
}
/// <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)
writer.WriteValue(stringValue);
else
@ -38,7 +38,7 @@ namespace CryptoExchange.Net.Converters
}
/// <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)
return null;

View File

@ -15,7 +15,7 @@ namespace CryptoExchange.Net.Converters
}
/// <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)
return null;
@ -25,9 +25,12 @@ namespace CryptoExchange.Net.Converters
}
/// <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));
}
}
}

View File

@ -17,7 +17,7 @@ namespace CryptoExchange.Net.Converters
}
/// <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)
return null;
@ -27,9 +27,9 @@ namespace CryptoExchange.Net.Converters
}
/// <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));
}
}
}

View File

@ -16,7 +16,7 @@ namespace CryptoExchange.Net.Converters
}
/// <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)
return null;
@ -29,9 +29,12 @@ namespace CryptoExchange.Net.Converters
}
/// <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));
}
}
}

View File

@ -9,20 +9,20 @@ namespace CryptoExchange.Net.Converters
public class UTCDateTimeConverter: JsonConverter
{
/// <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));
}
/// <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)
return null;
DateTime value;
if (reader.Value is string s)
value = (DateTime)JsonConvert.DeserializeObject(s);
value = (DateTime)JsonConvert.DeserializeObject(s)!;
else
value = (DateTime) reader.Value;

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
</PropertyGroup>
@ -6,13 +6,13 @@
<PackageId>CryptoExchange.Net</PackageId>
<Authors>JKorf</Authors>
<Description>A base package for implementing cryptocurrency exchange API's</Description>
<PackageVersion>3.2.1</PackageVersion>
<AssemblyVersion>3.2.0</AssemblyVersion>
<PackageVersion>3.3.0</PackageVersion>
<AssemblyVersion>3.3.0</AssemblyVersion>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageProjectUrl>https://github.com/JKorf/CryptoExchange.Net</PackageProjectUrl>
<NeutralLanguage>en</NeutralLanguage>
<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>
<LangVersion>8.0</LangVersion>
<PackageLicenseExpression>MIT</PackageLicenseExpression>

View File

@ -1636,9 +1636,7 @@
<summary>
Create an error result
</summary>
<param name="code"></param>
<param name="responseHeaders"></param>
<param name="error"></param>
<param name="result"></param>
<returns></returns>
</member>
<member name="T:CryptoExchange.Net.Objects.WebCallResult`1">
@ -1666,6 +1664,20 @@
<param name="data"></param>
<param name="error"></param>
</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)">
<summary>
Create an error result

View File

@ -158,9 +158,7 @@ namespace CryptoExchange.Net.Objects
/// <summary>
/// Create an error result
/// </summary>
/// <param name="code"></param>
/// <param name="responseHeaders"></param>
/// <param name="error"></param>
/// <param name="result"></param>
/// <returns></returns>
public static WebCallResult CreateErrorResult(WebCallResult result)
{
@ -199,12 +197,22 @@ namespace CryptoExchange.Net.Objects
ResponseHeaders = responseHeaders;
}
/// <summary>
/// Create new based on existing
/// </summary>
/// <param name="callResult"></param>
public WebCallResult(WebCallResult<T> callResult): base(callResult.Data, callResult.Error)
{
ResponseHeaders = callResult.ResponseHeaders;
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
{
return new WebCallResult<T>(source.ResponseStatusCode, source.ResponseHeaders, (T)source.Data, source.Error);

View File

@ -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.
## 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
* Fixed error code parsing