Closed omidmoradzadeh closed 3 years ago
Price and Quantity type support implicit conversion from decimal datatype. you could use m
to treat number as decimal.
Order order = new Order { Price : 2005.25m };
or
decimal price = 2005.25m;
Order order = new Order { Price : price };
Prefer using int/long/decimal/price/quantity datatype to represent financial amount instead of float or double.
For Serialization/Deserialization
You may need to write custom serialization/deserialization for Price, Quantity and OrderId data type. See below example code for
JsonConverter of System.Text.Json
public class PriceJsonConverter : JsonConverter<Price>
{
public override Price Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var price = reader.GetDecimal();
return new Price(price);
}
public override void Write(Utf8JsonWriter writer, Price objectToWrite, JsonSerializerOptions options)
{
decimal price = objectToWrite;
JsonSerializer.Serialize(writer, price, typeof(decimal), options);
}
}
public class QuantityJsonConverter : JsonConverter<Quantity>
{
public override Quantity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var quantity = reader.GetDecimal();
return new Quantity(quantity);
}
public override void Write(Utf8JsonWriter writer, Quantity objectToWrite, JsonSerializerOptions options)
{
decimal quantity = objectToWrite;
JsonSerializer.Serialize(writer, quantity, typeof(decimal), options);
}
}
public class OrderIdJsonConverter : JsonConverter<OrderId>
{
public override OrderId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var orderId = reader.GetInt32();
return new OrderId(orderId);
}
public override void Write(Utf8JsonWriter writer, OrderId objectToWrite, JsonSerializerOptions options)
{
int orderId = objectToWrite;
JsonSerializer.Serialize(writer, orderId, typeof(int), options);
}
}
Usage of above defined JsonConverter
var order = new Order { OrderId = 12, Price = 100.0001m, OpenQuantity = 20.00002m };
var jsonSerilizerOption = new JsonSerializerOptions { Converters = { new OrderIdJsonConverter(), new PriceJsonConverter(), new QuantityJsonConverter() } };
var jsonString = JsonSerializer.Serialize(order, jsonSerilizerOption);
var deserializedObject = JsonSerializer.Deserialize<Order>(jsonString, jsonSerilizerOption);
Hi How can floating-point be used in the amount of assets for buying and selling? For example :
{ "Price": 2005, "OpenQuantity":1.50 }