我想动态更改json属性名称并序列化对象.
i want to change the json property name dynamically and serialize the object.
这是两个不同实体的json
here is my json for two different entities
对于客户
{ "userName": "66666", "password": "test1234", "customersList": [ { "address": "Test Stree2", "customerNumber": "US01-000281", "city": "" } ] }用于联系
{ "userName": "66666", "password": "test1234", "contactList": [ { "address": "Test stree1", "contactNumber": "US01-000281", "city": "" } ] }和保存此数据的模型如下
and the model that is holding this data is as follows
public class URequest<T> { [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string userName { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string password { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public IList<T> requestList { get; set; } }上面的代码requestList中的
可能包含contacts或customer的列表,但是在发送时我想将requestList json属性名称更改为相应的实体名称,即对于customer,它将为customerList并且对于contact,它将在序列化后为contactList.
in above code requestList could contain list of contacts or customer but while sending i want to change the requestList json property name to respective entity name i.e. for customer it will be customerList and for contact it will be contactList after serializing.
推荐答案您可以创建自定义JsonConverter.
You can create a custom JsonConverter.
使用自定义JsonConverter为了更改对象部分的序列化
示例
public class Customer { public string Name { get; set; } } public class Client { public string Name { get; set; } } public class URequest<T> { [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string userName { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string password { get; set; } [JsonIgnore] public IList<T> requestList { get; set; } } public class URequestConverter<T> : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(URequest<T>)); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var objectType = value.GetType().GetGenericArguments()[0]; URequest<T> typedValue = (URequest<T>) value; JObject containerObj = JObject.FromObject(value); containerObj.Add($"{objectType.Name.ToLower()}List", JToken.FromObject(typedValue.requestList)); containerObj.WriteTo(writer); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } }您可以像这样使用它
[TestMethod] public void TestMethod1() { URequest<Customer> request = new URequest<Customer>(); request.password = "test"; request.userName = "user"; request.requestList = new List<Customer>(); request.requestList.Add(new Customer() { Name = "customer" }); JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Formatting = Formatting.Indented; settings.Converters.Add(new URequestConverter<Customer>()); Console.WriteLine(JsonConvert.SerializeObject(request, settings)); }更多推荐
动态更改json属性名称并序列化
发布评论