A: 

Is there a reason you need to separate ProtoObject and ProtoObject<T>? protobuf-net seems to create an object of type T (in a roundabout way) in ObjectFactory, and I'm assuming that T is going to be ProtoObject, which is abstract.

Sorry I'm not more helpful - I don't have too much time to dig further right at the moment.

TheEvilPenguin
A: 

This may be simply a limitation in "v1". I've added this as a test on "v2", and it passed (I had to invent UrlStatus and TrafficEntry to get it to compile):

    public enum UrlStatus { A,B }
    public enum TrafficEntry { A }
    [ProtoContract]
    public class SerializableException { }

    [Test]
    public void TestBasicRoundTrip()
    {
        var item = new ProtoDictionary<string>();
        item.Add("abc", "def");
        item.Add("ghi", new List<UrlStatus> {UrlStatus.A, UrlStatus.B});

        var clone = Serializer.DeepClone(item);
        Assert.AreEqual(2, clone.Keys.Count);
        object o = clone["abc"];
        Assert.AreEqual("def", clone["abc"].Value);
        var list = (IList<UrlStatus>)clone["ghi"].Value;
        Assert.AreEqual(2, list.Count);
        Assert.AreEqual(UrlStatus.A, list[0]);
        Assert.AreEqual(UrlStatus.B, list[1]);
    }

With "v1", maybe simply don't make it abstract? (workaround, not fix)

Also; there should be no need for the SerializationInfo ctor; that is not used by protobuf-net (although you can implement protobuf-net inside BinaryFormatter by providing this method and calling into Merge)

Marc Gravell
So, if I don't make ProtoObject abstract, I get this error instead "ProtoException: Unterminated group(s) in a message or sub-message". How close is v2 to being usable or how hard would it be to fix this in v1?
Dan at Demand
@Dan "Unterminated group" sounds like you didn't get the whole data, or you accidentally packed some garbage. Do you have a reproducible example I can work with?
Marc Gravell
Well...I feel like an idiot. The data that was being used for the deserialization was bad. Once that was fixed, everything worked. No need to remove the abstract declaration even. Sorry to have wasted your time! Thank you so much for the help!!!! Again, sorry for wasting your time.
Dan at Demand
@Dan - not a problem. Glad it works now.
Marc Gravell