使用Newton JSON ser \ deser将JSON的2个字符串属性合并或合并到Class对象中

问题描述 投票:0回答:1

我有如下JSON数据

{
   "data" : [{
         "FirstName": "John",
         "MiddleName": "F",
         "LastName": "Anderson"
    }]
}

并且当我反序列化时,它应该merge \ concat合并为单个属性,这是一个复杂的类型(类名)。如何在ReadJson方法中获取所有3个字符串json属性。

class Data {
  public Name empName;
};
class Name{
   public string FName;
   public string MName;
   public string LName;
};

我尝试使用牛顿JSON和JSONConverter使用以下代码

class Data {
  [JsonProperty("LastName")]
  [JsonConverter(typeof(StringToName))]  
  public Name empName;
};

public class StringToName: JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            throw new NotImplementedException();
        }

        public override bool CanWrite
        {
            get
            {
                return false;    // we'll stick to read-only. If you want to be able 
                                 // to write it isn't that much harder to do.
            }
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            // Note: I've skipped over a lot of error checking and trapping here
            // but you might want to add some
            Name objInst = new Name
            {
               **//Problem: how do i get all the 3 properties so that it can be 
               // merged together  **
               =====================
            };
            return objInst;
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }
    }

c# json serialization merge complextype
1个回答
0
投票

您可以在没有JsonConverter的情况下执行此操作,例如以下代码:1-创建与Json匹配的类,并添加MergedName属性,该属性采用串联的FirstNameMiddleNameLastName

public class Data
{
    [JsonProperty("data")]
    public DataChild[] Names { get; set; }
};

public class DataChild
{
    [JsonProperty("FirstName")]
    public string FirstName { get; set; }

    [JsonProperty("MiddleName")]
    public string MiddleName { get; set; }

    [JsonProperty("LastName")]
    public string LastName { get; set; }

    public string MergedName => $"{FirstName} {MiddleName} {LastName}";
};

2-反序列化Json并显示并置名称

Data data = JsonConvert.DeserializeObject<Data>(json);

foreach(DataChild name in data.Names)
{
    Console.WriteLine($"FirstName : {name.FirstName}, MiddleName : {name.MiddleName}, LastName : {name.LastName}, " +
        $"ConcatenatedName : {name.MergedName}");
}

结果

FirstName : John, MiddleName : F, LastName : Anderson, ConcatenatedName : John F
 Anderson

希望您能找到帮助。

© www.soinside.com 2019 - 2024. All rights reserved.