サードパーティAPIは特定の構造だけを受け入れるため、カスタムJSONコンバーターを使用しています。別のカスタムコンバーター内でコンバーターでenumをシリアル化する方法
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var bodyRequest = (IRequest) value;
writer.WriteStartObject();
writer.WritePropertyName(bodyRequest.RequestName);
writer.WriteStartObject();
writer.WritePropertyName("-xmlns");
writer.WriteValue("http://example.com");
writer.WritePropertyName(bodyRequest.WrapperName);
writer.WriteStartObject();
var contractResolver = new CamelCasePropertyNamesContractResolver {
IgnoreSerializableAttribute = false
};
var properties = value.GetType().GetProperties();
foreach(var propertyInfo in properties) {
if (HasAttribute(propertyInfo, typeof(JsonIgnoreAttribute))) {
continue;
}
var propValue = propertyInfo.GetValue(value);
var propertyName = contractResolver.GetResolvedPropertyName(propertyInfo.Name);
writer.WritePropertyName(propertyName);
writer.WriteValue(propValue);
}
writer.WriteEndObject();
writer.WriteEndObject();
writer.WriteEndObject();
}
だから、私はその後、私はすべてのプロパティを取得し、それらをシリアライズ、WriteXXX
方法の助けを借りてstrcutureを作成します。すべて正常に動作しますが、Enumを処理する必要があります。
public class ExampleRequest : IRequest
{
public long Id{ get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public CarType CarType { get; set; }
public string RequestName => "Request";
public string WrapperName => "SendData";
}
public enum CarType
{
[EnumMember(Value = "NEW_CAR")
New,
[EnumMember(Value = "OLD_CAR")
Old
}
現在、シリアライズした後、私は私はリフレクションを使用してStringEnumConverter
が無視されることを理解し、CarType
が数値0または1を持っていることを参照してください。たとえば、我々は次の要求モデルを持っています。この場合、正しくシリアル化するにはどうすればよいですか?
しようとします。ありがとう。 – user348173