序列化PropertyInfo應該受支持嗎?如果不是,什麼是最好的解決方法?我知道可以序列化類型(支持它),然後通過屬性查找屬性 - 想象查找可能很昂貴。嘗試序列化PropertyInfo時引發異常
p.s. PropertyInfo用於實現類似於DataLoadOptions.LoadWith http://msdn.microsoft.com/en-us/library/bb548760.aspx的功能。當InvalidOperationException
提高
using System.IO;
using System.Reflection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ProtoBuf;
[ProtoContract]
public class A
{
[ProtoMember(1)]
public PropertyInfo Property { get; set; }
}
[TestClass]
public class UnitTest
{
[TestMethod]
public void TestMethod1()
{
var value = new A { Property = typeof(string).GetProperty("Length") };
using (var stream = new MemoryStream())
{
// Raises InvalidOperationException
// "No serializer defined for type: System.Reflection.PropertyInfo"
Serializer.Serialize(stream, value);
}
}
}
調用堆棧:
protobuf-net.dll!ProtoBuf.Meta.ValueMember.BuildSerializer() Line 316 C#
protobuf-net.dll!ProtoBuf.Meta.ValueMember.Serializer.get() Line 188 + 0x24 bytes C#
protobuf-net.dll!ProtoBuf.Meta.MetaType.BuildSerializer() Line 421 + 0x1f bytes C#
protobuf-net.dll!ProtoBuf.Meta.MetaType.Serializer.get() Line 344 + 0xe bytes C#
protobuf-net.dll!ProtoBuf.Meta.RuntimeTypeModel.Serialize(int key, object value, ProtoBuf.ProtoWriter dest) Line 592 + 0x44 bytes C#
protobuf-net.dll!ProtoBuf.Meta.TypeModel.SerializeCore(ProtoBuf.ProtoWriter writer, object value) Line 178 + 0x14 bytes C#
protobuf-net.dll!ProtoBuf.Meta.TypeModel.Serialize(System.IO.Stream dest, object value, ProtoBuf.SerializationContext context) Line 209 + 0xe bytes C#
protobuf-net.dll!ProtoBuf.Meta.TypeModel.Serialize(System.IO.Stream dest, object value) Line 193 + 0x10 bytes C#
protobuf-net.dll!ProtoBuf.Serializer.Serialize<TestProtoBufNet.A>(System.IO.Stream destination, TestProtoBufNet.A instance) Line 88 + 0x18 bytes C#
TestProtoBufNet.dll!TestProtoBufNet.UnitTest.TestMethod1() Line 24 + 0x10 bytes C#
只需稍微調整一下語法,並使用GetProperty處理不明確的情況,這種方式就像魅力一樣。謝謝馬克。 – user1546077 2012-07-27 19:25:15
@ user1546077沒問題; 「一個小小的語法調整」 - 我得到'運營商'語法顛倒?不幸的是,我總是這麼做。當我記得並想「哦,我總是弄錯了 - 扭轉它們」,事實證明我是正確的*在我扭轉它們之前。嘆。 – 2012-07-27 19:43:28
正確的操作符語法。我編輯了你的原始回覆,所以一旦mods批准,你的原創將看起來很完美。 – user1546077 2012-07-27 19:45:07