Objektnotation: XML, JSON, PSON

Här följer en kort kommentar om tre olika format för textbaserad objektnotation.

XML

Fördelar: Stöd för dokumenttypsdefinitioner (DTD) och scheman. God tillgång på bra API:er.
Nackdelar: Mycket overhead (ett “pratigt” språk), endast Visual Basic har inbyggt stöd för formatet.

Exempel på notation:

<?xml version="1.0" encoding="utf-8" ?>
<customer>
	<id>551</id>
	<account>9153</account>
	<name>
		<firstName>Sven</firstName>
		<lastName>Hedin</lastName>
	</name>
</customer>

Exempel på inläsning (C#, otypat):

var dom = new XmlDocument();
dom.Load("object.xml");
var document = dom.DocumentElement;
var customerId = document!.SelectSingleNode("id")!.InnerText;
Console.WriteLine($"ID={customerId}");

JSON

Fördelar: Liten overhead, god tillgång på bra API:er. Minimal schematisk information (vad som är en array eller ett enskilt objekt) kan anges i formatet.
Nackdelar: Nästan ingen typsäkerhet.

Exempel på notation:

{
  "id": 551,
  "account": 9153,
  "name": {
    "firstName": "Sven",
    "lastName":  "Hedin" 
  } 
}

Exempel på inläsning (C#, otypat):

using var sr = new StreamReader("object.json", Encoding.UTF8);
var json = sr.ReadToEnd();
dynamic customer = JObject.Parse(json);
Console.WriteLine($"ID={customer!.id}");

Exempel på inläsning (C#, typat):

using var sr = new StreamReader("object.json", Encoding.UTF8);
var json = sr.ReadToEnd();
var customer = JsonSerializer.Deserialize<Customer>(json);
Console.WriteLine($"ID={customer!.Id}");

class Customer
{
    [JsonPropertyName("id")]
    public int Id { get; set; }
    [JsonPropertyName("account")] 
    public int Account { get; set; }
    [JsonPropertyName("name")] 
    public Name Name { get; set; }
}

class Name
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; }
    [JsonPropertyName("lastName")]
    public string LastName { get; set; }
}

PSON

Fördelar: Liten overhead. Viss schematisk information kan anges i formatet, som vad som är en array eller ett enskilt objekt och objekttyp. Kan skrivas typsäkert.
Nackdelar: Kan endast användas från PowerShell.

Exempel på notation:

@{
  Id: 551,
  Account: 9153,
  Name: @{
    FirstName: "Sven"
    FastName:  "Hedin" 
  } 
}

Inläsning av den filen sker genom PowerShell och kan plockas upp av C# genom det generella gränssnittet Microsoft tillhandahåller för att nå svaret från PowerShell.

Datastorleken för XML är 188 bytes, JSON 110 bytes och PSON 104 bytes.

Leave a Reply

Your email address will not be published. Required fields are marked *