gpt4 book ai didi

c# - 使用 JSON.NET 序列化/反序列化动态属性名称

转载 作者:行者123 更新时间:2023-12-04 16:46:52 24 4
gpt4 key购买 nike

我有以下类(class):

public class MyRequest
{
public string Type {get;set;}
public string Source {get;set;}
}

我想从名为 Type 的值的 JSON 字段中序列化/反序列化 Source 的值,例如:

{
"type": "bank",
"bank": "Some value"
}

{
"type": "card",
"card": "Some value"
}

两者都绑定(bind)到 Source 属性。

最佳答案

您可以创建自定义 JsonConverter处理动态属性名称:

public class MyRequestConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(MyRequest);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
string type = (string)jo["type"];
MyRequest req = new MyRequest
{
Type = type,
Source = (string)jo[type ?? ""]
};
return req;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
MyRequest req = (MyRequest)value;
JObject jo = new JObject(
new JProperty("type", req.Type),
new JProperty(req.Type, req.Source));
jo.WriteTo(writer);
}
}

要使用转换器,请将 [JsonConverter] 属性添加到您的类中,如下所示:

[JsonConverter(typeof(MyRequestConverter))]
public class MyRequest
{
public string Type { get; set; }
public string Source { get; set; }
}

这是一个有效的往返演示:https://dotnetfiddle.net/o7NDTV

关于c# - 使用 JSON.NET 序列化/反序列化动态属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com