Я пишу командлет и мне нужно передать объектные структуры в клиент API, который может содержать PSObject
s. В настоящее время они сериализуются в виде строки JSON, содержащей CLIXML. Вместо этого мне нужно обрабатывать его как объект (включая свойства NoteProperties в PSObject.Properties
как свойства и рекурсивно сериализовать их значения).
Я попытался написать свой собственный JsonConverter
, но по какой-то причине он вызывается только для объекта верхнего уровня, а не для вложенных PSObject
s:
public class PSObjectJsonConverter : JsonConverter {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
if (value is PSObject) {
JObject obj = new JObject();
foreach (var prop in ((PSObject)value).Properties) {
obj.Add(new JProperty(prop.Name, value));
}
obj.WriteTo(writer);
} else {
JToken token = JToken.FromObject(value);
token.WriteTo(writer);
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
throw new NotImplementedException();
}
public override bool CanRead {
get { return false; }
}
public override bool CanConvert(Type objectType) {
return true;
}
}
Кроме того, я использую сериализацию для случая верблюда, используя CamelCasePropertyNamesContractResolver
. Есть ли способ заставить конвертер уважать это?