Serialization 在消息中检测到不匹配的组标记-protobuf net
我对Silverlight很陌生。我正在为一个主要依赖于序列化和反序列化的项目工作 以前,对于WPF,我很熟悉可序列化类。对于silverlight,我发现protobuf非常有用。但是,我为这个例外感到困扰。我不知道是什么导致了这个问题。请帮帮我 我正在使用Silverlight 3.0。 协议网络r282 请找到我正在使用的代码Serialization 在消息中检测到不匹配的组标记-protobuf net,serialization,protobuf-net,Serialization,Protobuf Net,我对Silverlight很陌生。我正在为一个主要依赖于序列化和反序列化的项目工作 以前,对于WPF,我很熟悉可序列化类。对于silverlight,我发现protobuf非常有用。但是,我为这个例外感到困扰。我不知道是什么导致了这个问题。请帮帮我 我正在使用Silverlight 3.0。 协议网络r282 请找到我正在使用的代码 [ProtoContract] public class Report { public Report() { } [ProtoM
[ProtoContract]
public class Report
{
public Report()
{
}
[ProtoMember(1)]
public SubReports SubReports { get; set; }
}
[ProtoContract]
public class SubReports
: List<SubReport>
{
public SubReports()
{
}
[ProtoMember(1)]
public SubReport SubReport { get; set; }
}
[ProtoContract]
public class SubReport
{
public SubReport()
{
}
[ProtoMember(1)]
public string Name { get; set; }
}
提前感谢。Vinodh(注意:我无法复制“组标签”问题;请参阅编辑历史,了解我对此的最初想法,现已删除;如果您能帮助我复制此内容,我将不胜感激) 问题是
子报表
。您已经将其定义为列表和序列化实体([ProtoContract]
);后者优先,因此它试图序列化列表上的单个子报表(总是null
?)
如果将此更改为:
// note no attributes, no child property
public class SubReports : List<SubReport> { }
显示blob:
0A040A0251310A040A025132A040A0251030A040A0251344
(注意:我无法复制“组标签”问题;请参阅编辑历史,了解我对此的最初想法,现已删除;如果您能帮助我复制此问题,我将不胜感激)
问题是子报表
。您已经将其定义为列表和序列化实体([ProtoContract]
);后者优先,因此它试图序列化列表上的单个子报表(总是null
?)
如果将此更改为:
// note no attributes, no child property
public class SubReports : List<SubReport> { }
显示blob:
0A040A0251310A040A025132A040A0251030A040A0251344
非常感谢马克的迅速回复。我会调查的。嗨,马克,你上次的回答本身就解决了我的问题。实际上,我正在尝试反序列化一个xml文件并填充类,就像我们在桌面应用程序中使用的[Serializable]一样。是的,通过使用上述建议,我在“子报告”中得到了“null”。谢谢更新:)非常感谢marc的快速回复。我会调查的。嗨,马克,你上次的回答本身就解决了我的问题。实际上,我正在尝试反序列化一个xml文件并填充类,就像我们在桌面应用程序中使用的[Serializable]一样。是的,通过使用上述建议,我在“子报告”中得到了“null”。感谢您的更新:)
// note no attributes, no child property
public class SubReports : List<SubReport> { }
static void Main() {
byte[] blob;
// store a report
using (MemoryStream ms = new MemoryStream()) {
Report report = new Report {
SubReports = new List<SubReport> {
new SubReport { Name="Q1"},
new SubReport { Name="Q2"},
new SubReport { Name="Q3"},
new SubReport { Name="Q4"},
}
};
Serializer.Serialize(ms, report);
blob = ms.ToArray();
}
// show the hex
foreach (byte b in blob) { Console.Write(b.ToString("X2")); }
Console.WriteLine();
// reload it
using (MemoryStream ms = new MemoryStream(blob)) {
Report report = Serializer.Deserialize<Report>(ms);
foreach (SubReport sub in report.SubReports) {
Console.WriteLine(sub.Name);
}
}
}