Was genau wollen Sie die Ausgabe so aussehen? Sie können es manuell schreiben (siehe Liriks Antwort), oder wenn Sie Runtime-Unterstützung wünschen, vielleicht etwas wie protobuf-net.
Dies wäre trivial zu tun, wenn Sie Klassen verwenden (was ich erwarte, dass Sie eigentlich sein sollten), aber zusätzlich Protobuf-Net v2 (nur als Quelle im Moment verfügbar) sollte mit "wie es ist" arbeiten.
Für Informationen, hier ist, wie ich es als Klassen tun würde:
public class Company
{
private readonly List<Employee> employees = new List<Employee>();
public List<Employee> Employees { get { return employees;}}
}
public class Employee
{
public string EmployeeName {get;set;}
public string Designation {get;set;}
}
Dieses mit Serialisierung Attribute eingerichtet werden könnte, oder (wieder protobuf-net v2 verwenden) so etwas wie dieser Test (was passiert) :
[Test]
public void CanSerializeCompany()
{
var model = TypeModel.Create();
model.Add(typeof(Company), false).Add("Employees");
model.Add(typeof(Employee), false).Add("EmployeeName", "Designation");
model.CompileInPlace();
Company comp = new Company {
Employees = {
new Employee { Designation = "Boss", EmployeeName = "Fred"},
new Employee { Designation = "Grunt", EmployeeName = "Jo"},
new Employee { Designation = "Scapegoat", EmployeeName = "Alex"}}
}, clone;
using(var ms = new MemoryStream()) {
model.Serialize(ms, comp);
ms.Position = 0;
Console.WriteLine("Bytes: " + ms.Length);
clone = (Company) model.Deserialize(ms, null, typeof(Company));
}
Assert.AreEqual(3, clone.Employees.Count);
Assert.AreEqual("Boss", clone.Employees[0].Designation);
Assert.AreEqual("Alex", clone.Employees[2].EmployeeName);
}
(und schreibt 46 Byte)
Es sollte Arbeit mit privaten Feldern, Strukturen, usw. - ich würde eine Toilette nehmen k ...
Wenn Sie Attribute hinzufügen können, müssen Sie das Modell nicht manuell einrichten (die ersten 4 Zeilen). Der Rest des Codes zeigt nur die vollständige Round-Trip-Nutzung an.
Warum ist das eine Struktur? Das sieht nicht nach einer guten Verwendung für "struct" aus, und ich nehme an, dass es dich auf interessante Weise beißen wird. Ich würde hier eine 'Klasse' verwenden ... –