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.

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll:

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!

Comments

Important information: If you have not commented before, your comment will be reviewed before it is published. This means that you will not see it immediately, but I have received it. This is not because I want to filter comments, but because I want to prevent spam and advertising.

Leave a Reply

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