» serialization
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.



Serialization is a method to save objects from memory to the hard disk and deserialization is the way back from hard disk to memory. There are several implementations of serializers in .NET, ranging from simple XML to binary output. VVVV uses XML serialization based on the XElement type from System.Xml.Linq, which represents an XML tag.

Serializer Interface

For reasons of code clarity and human readability of the XML output we use our own serialization method, which is basically an interface with two methods:

public interface ISerializer
        XElement Serialize(object value, Serializer serializer);
        object Deserialize(XElement data, Type type, Serializer serializer);

As the type of the object to serialize/desrialize is most of the time known on compile time there is also a generic version of the interface which is commonly used:

public interface ISerializer<T>
        XElement Serialize(T value, Serializer serializer);
        T Deserialize(XElement data, Type type, Serializer serializer);

Global Serializer

The second important part of our serialization method is a global Serializer object. This global serializer knows all registered specific serializers and it also uses the .Net binary serializer to serialize all .Net types which are serializable by default. It is passed to each Serialize/Deserialize method, so that the writer of a serializer can serialize/deserialize objects of other types that may already have a registered serializer. The global serializer has a few methods to register specific Serializers and to serialize/deserialize objects:

//register specific serializer
public void Register<TSource, TDest>() where TDest : ISerializer
public void RegisterGeneric<TSource, TDest>() where TDest : ISerializer<TSource>
public void Register(Type sourceType, Type serializerType)
public XElement Serialize(object value)
public T Deserialize<T>(XElement data, Type type)
public T Deserialize<T>(XElement data)
public object Deserialize(XElement data, Type type)

Writing a Serializer

To write a De-/Serializer for a certain type, one has to implement one of the interfaces above. And then register the serializer. For example, lets write a serializer for a simple class Foo:

class Foo
        public string Bar;
        public int Baz;
        public Foo(string bar, int baz)
            this.Bar = bar;
            this.Baz = baz;

The serializer could look like this:

class FooSerializer : ISerializer<Foo>
        public XElement Serialize(Foo value, Serializer serializer)
            //create base tag
            var x = new XElement("FOO");
            //add tags for the fields
            var xBar = new XElement("BAR");
            var xBaz = new XElement("BAZ");
            xBar.Value = value.Bar;
            //let the serializer handle the int field
            return x;
        public Foo Deserialize(XElement data, Type type, Serializer serializer)
            var bar = data.Element("BAR").Value;
            //get the int field
            var baz = serializer.Deserialize<int>(data.Element("BAZ").Element("OBJECT"));
            return new Foo(bar, baz);

Then the serializer must be registered at the global serializer, where and when this happens is application specific. Its as simple as:

GlobalSerializer.RegisterGeneric<Foo, FooSerializer>();

Then the it can be used to serialize/deserialize a Foo object:

var foo = new Foo("Hallo serializer", 100);
var xml = GlobalSerializer.Serialize(foo);
var xml = XElement.Load(@"c:\temp\Foo.xml");
var foo = GlobalSerializer.Deserialize<Foo>(xml);

The resulting XML will lool like:

  <BAR>Hallo serializer</BAR>
    <OBJECT Type="System.Int32, mscorlib, Version=, Culture=neutral,

anonymous user login


~1mth ago

mediadog: @ggml Yup, lots. Only used in 4.x, haven't tried in 5.x yet: https://www.unrealengine.com/marketplace/en-US/product/simple-udp-tcp-socket-client

~1mth ago

ggml: someone has sent udp bytes to unreal ?

~2mth ago

micha_nismus: worked out, thank you very much ! :-)

~2mth ago

joreg: @micha_nismus does this help? https://youtu.be/xkrbT45BgOQ

~2mth ago

micha_nismus: thx joerg. Can anybody help me why i can't see any renderer in gamma? thx :-)

~2mth ago

joreg: @micha_nismus instead of discord, we're using matrix, see: chat

~2mth ago

micha_nismus: searching for a public discord server for vvvv

~2mth ago

joreg: Join us for the 20th #vvvv meetup on January 19th: https://thenodeinstitute.org/event/20-worldwide-vvvv-meetup/

~2mth ago

joreg: @schlonzo re "SDSL support" did you see the Shader wizard? or do you mean something different?