Класс PartitionKey
не предоставляет общедоступных членов, которые Json.Net сможет "увидеть" для сериализации в JSON. Поэтому, когда вы пытаетесь сериализовать его напрямую, он выходит как пустой объект {}
в JSON. При десериализации Json.Net пытается использовать конструктор PartitionKey
, но не знает, что заполнять для параметра keyValue
, поэтому он просто использует null
. Так что это объясняет результат, который вы видите.
Я заметил, что сам класс PartitionKey
, похоже, имеет поддерживаемый способ преобразования его в JSON и из него с использованием его методов ToString()
и FromJsonString()
. Поэтому, если вы хотите включить этот класс в большую сериализацию, вы можете сделать простой JsonConverter
, который бы позволил ему работать:
public class PartitionKeyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(PartitionKey);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string s = (string)reader.Value;
return s != null ? PartitionKey.FromJsonString(s) : null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
}
Чтобы использовать конвертер, просто передайте экземпляр методам SerializeObject
и DeserializeObject<T>
, например:
var data = JsonConvert.SerializeObject(requestOptions, new PartitionKeyConverter());
var requestOptions1 = JsonConvert.DeserializeObject<RequestOptions>(data, new PartitionKeyConverter());
Скрипка: https://dotnetfiddle.net/Jqo7mg