Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.
2021-04-23
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.
Categories: C#, PowerShell
Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!
Leave a Reply