将物品放一层

时间:2018-05-29 07:06:24

标签: c# json

我有一个看起来像这样的JSON

{
    "ipv4": null,
    "location": {
      "lat": "xx.xxx",
      "lng": "xx.xxx",
      "x": [],
      "y": []
    },
    "time": "05/28/2018 06:10:27"
  }

我正在尝试用C#解析它,并将“位置”中的项目放在一层,这样它们与“ipv4”处于同一级别,从而删除“location”。 这应该如下所示

{
    "ipv4": null,
    "lat": "xx.xxx",
    "lng": "xx.xxx",
    "x": [],
    "y": [],
    "time": "05/28/2018 06:10:27"
  }

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是拥有两个C#对象,其中一个代表实际的JSON格式,另一个代表新的所需格式。将其反序列化为第一个C#对象,创建所需格式的新对象并将其序列化:

实际JSON结构的类

public class Location
{
    public string lat { get; set; }
    public string lng { get; set; }
    public List<object> x { get; set; }
    public List<object> y { get; set; }
}

public class RootObjectOld
{
    public object ipv4 { get; set; }
    public Location location { get; set; }
    public string time { get; set; }
}

所需JSON结构的类

public class RootObjectNew
{
    public object ipv4 { get; set; }
    public string lat { get; set; }
    public string lng { get; set; }
    public List<object> x { get; set; }
    public List<object> y { get; set; }
    public string time { get; set; }
}

使用JSON.Net之类的框架对其进行反序列化:

var old = JsonConvert.DeserializeObject<RootObjectOld>(<YourJson>);

通过复制值创建新对象:

var myNewObject = new RootObjectNew {
   ipv4 = old.ipv4,
   lat = old.Location.lat,
   ...
};

将其序列化:

var newJson = JsonConvert.SerializeObject(myNewObject);