/** <inheritdoc /> */ virtual public void ReadPortable(IPortableReader reader) { Before = reader.ReadString("before"); Outer = reader.ReadObject<HandleOuter>("outer"); After = reader.ReadString("after"); IPortableRawReader rawReader = reader.RawReader(); RawBefore = rawReader.ReadString(); RawOuter = rawReader.ReadObject<HandleOuter>(); RawAfter = rawReader.ReadString(); }
public void TestHandles() { ICollection<PortableTypeConfiguration> typeCfgs = new List<PortableTypeConfiguration>(); typeCfgs.Add(new PortableTypeConfiguration(typeof(HandleInner))); typeCfgs.Add(new PortableTypeConfiguration(typeof(HandleOuter))); PortableConfiguration cfg = new PortableConfiguration(); cfg.TypeConfigurations = typeCfgs; PortableMarshaller marsh = new PortableMarshaller(cfg); HandleOuter outer = new HandleOuter(); outer.Before = "outBefore"; outer.After = "outAfter"; outer.RawBefore = "outRawBefore"; outer.RawAfter = "outRawAfter"; HandleInner inner = new HandleInner(); inner.Before = "inBefore"; inner.After = "inAfter"; inner.RawBefore = "inRawBefore"; inner.RawAfter = "inRawAfter"; outer.Inner = inner; outer.RawInner = inner; inner.Outer = outer; inner.RawOuter = outer; byte[] bytes = marsh.Marshal(outer); IPortableObject outerObj = marsh.Unmarshal<IPortableObject>(bytes, PortableMode.ForcePortable); HandleOuter newOuter = outerObj.Deserialize<HandleOuter>(); HandleInner newInner = newOuter.Inner; CheckHandlesConsistency(outer, inner, newOuter, newInner); // Get inner object by field. IPortableObject innerObj = outerObj.Field<IPortableObject>("inner"); newInner = innerObj.Deserialize<HandleInner>(); newOuter = newInner.Outer; CheckHandlesConsistency(outer, inner, newOuter, newInner); // Get outer object from inner object by handle. outerObj = innerObj.Field<IPortableObject>("outer"); newOuter = outerObj.Deserialize<HandleOuter>(); newInner = newOuter.Inner; CheckHandlesConsistency(outer, inner, newOuter, newInner); }
private void CheckHandlesConsistency(HandleOuter outer, HandleInner inner, HandleOuter newOuter, HandleInner newInner) { Assert.True(newOuter != null); Assert.AreEqual(outer.Before, newOuter.Before); Assert.True(newOuter.Inner == newInner); Assert.AreEqual(outer.After, newOuter.After); Assert.AreEqual(outer.RawBefore, newOuter.RawBefore); Assert.True(newOuter.RawInner == newInner); Assert.AreEqual(outer.RawAfter, newOuter.RawAfter); Assert.True(newInner != null); Assert.AreEqual(inner.Before, newInner.Before); Assert.True(newInner.Outer == newOuter); Assert.AreEqual(inner.After, newInner.After); Assert.AreEqual(inner.RawBefore, newInner.RawBefore); Assert.True(newInner.RawOuter == newOuter); Assert.AreEqual(inner.RawAfter, newInner.RawAfter); }