0

I have a task to fetch the list of all missing updates using a C# .NET Framwork 4.7.2 windows Service which runs at specific intervals.

I have gotten this far to Fetch the Missing updates following this Answer.

Now I need to Put all the Fetched data in a JSON file using the following Format:

{
            "hostName": "LRD-SomeHost",
            "ip" : "192.168.13.12",
            "mac" : "MAC:23:23:123:AS"
            "timeStamp" : "CURRENT_TIME_STAMP",
            "updates" : [
                {
                    "updateID": "b32e464f-2e4a-4109-9018-33583a079a8a",
                    "updateDetails": [
                                  {
                                    "patchDescription" : "Some Long Description",
                                    "patchCategory" : "28bc880e-0592-4cbf-8f95-c79b17911d5f"
                                    "patchType" : "UpdateClassification"
                                    "patchName" : "Update Rollups"
                                  },
                                  {
                                    "patchDescription" : "Windows 10"
                                    "patchCategory" : "a3c2375d-0c8a-42f9-bce0-28333e198407"
                                    "patchType" : "Product"
                                    "patchName" : "Windows 10"
                                  },
                                  {
                                    "patchDescription" : "Windows 10 LTSB"
                                    "patchCategory" : "d2085b71-5f1f-43a9-880d-ed159016d5c6"
                                    "patchType" : "Product"
                                    "patchName" : "Windows 10 LTSB"
                                  }
                        ]
                }
            ]
        }

Following is my C# Model:

namespace UpdateCollector
{
 public class Host
{
    public string hostname { get; set; }
    public string ip { get; set; }
    public string mac { get; set; }
    public DateTime? timeStamp { get; set; }
    public List<Updates> updates { get; set; }

}

public class Updates
{
    public string updateID { get; set; }
    public List<UpdateDetails> updateDetails { get; set; }
}

public class UpdateDetails
{
    public string patchDescription { get; set; }
    public string patchCategory { get; set; }
    public string patchType { get; set; }
    public string patchName { get; set; }
}
}

My Question is How to put my C# Data in this Format?

Thanks

yodellingbutters
  • 285
  • 6
  • 20
  • do a search on `jsonserialization` – jazb Nov 25 '19 at 07:03
  • PatchType and PatchName don't need to be enclosed in quotation marks? – Isma Nov 25 '19 at 07:03
  • Answers may differ for different platforms/versions. What are you developing on/for? framework ? core ? if core , pre-3.0 ? – Fildor Nov 25 '19 at 07:10
  • Edited my Question. @Jazb I am using `string json = JsonConvert.SerializeObject(host);` to convert the final result in JSON file. But How do I put the values in my `Model` ? – yodellingbutters Nov 25 '19 at 07:17

2 Answers2

3

You could use Json.NET to achieve this, here is a possible implementation:

First you need to install the package using NuGet:

Install-Package Newtonsoft.Json -Version 12.0.3

Then you define your classes in the same way you are doing, you can, however, use C# naming conventions and make use of attributes to specify different names for serialization:

public class Host
{
    [JsonProperty(PropertyName = "hostname")]
    public string Hostname { get; set; }
    [JsonProperty(PropertyName = "ip")]
    public string Ip { get; set; }
    [JsonProperty(PropertyName = "mac")]
    public string Mac { get; set; }
    [JsonProperty(PropertyName = "timeStamp")]
    public DateTime? TimeStamp { get; set; }
    [JsonProperty(PropertyName = "updates")]
    public List<Updates> Updates { get; set; }
}

public class Updates
{
    [JsonProperty(PropertyName = "updateID")]
    public string UpdateId { get; set; }
    [JsonProperty(PropertyName = "updateDetails")]
    public List<UpdateDetails> UpdateDetails { get; set; }
}

public class UpdateDetails
{
    [JsonProperty(PropertyName = "patchDescription")]
    public string PatchDescription { get; set; }
    [JsonProperty(PropertyName = "patchCategory")]
    public string PatchCategory { get; set; }
    [JsonProperty(PropertyName = "patchType")]
    public string PatchType { get; set; }
    [JsonProperty(PropertyName = "patchName")]
    public string PatchName { get; set; }
}

To serialize your class to json you can use the following statement:

var host = new Host();
// Fill all the properties, lists etc...
string json = JsonConvert.SerializeObject(host, Formatting.Indented);

To deserialize a json string back to the a C# object you use the opposite statement:

Host host = JsonConvert.DeserializeObject<Host>(json);

The code above should work for most cases but if you need to serialize / deserialize any of your objects in a special way you can write a custom JsonConverter: see here for an example.

Isma
  • 14,604
  • 5
  • 37
  • 51
0
  1. Install Newtonsoft.Json package and do serialization of your object.
  2. follow below code example.
List<Host> dataList=new List<Host>();
string jsonString = JsonConvert.SerializeObject(dataList);
Fildor
  • 14,510
  • 4
  • 35
  • 67