为什么这个结构序列化?

时间:2010-10-21 23:48:05

标签: c# .net xml serialization

我有以下结构:

public struct Declarations
{
 public const string SchemaVersion = "urn:ean.ucc:gdsn:2";
}

SchemaVersion被一些试图像这样序列化的XmlElements使用:

[XmlElement(Type=typeof(SomeGarbage),ElementName="moreJunk",IsNullable=false,Form=XmlSchemaForm.Unqualified,Namespace=Declarations.SchemaVersion)]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public SomeType __someMember;

当我尝试在我的dll上运行sgen.exe时出现以下错误:

错误1反映类型'BigHammer.CINParser.Messages.Declarations'时出现错误 错误2命令“”C:\ Program Files(x86)\ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin \ sgen.exe“/ force”C:\ Users \ mstoddard \ teamserver_source \ GDSN \ CINParser \ CINParser \斌\调试\ BigHammer.CINParser.dll” “退出代码1。

我试过让结构成为一个类,没有帮助 我尝试添加默认构造函数,没有帮助

思想?

===更新===
看起来Visual Studio隐藏了一些信息,我在两个不同的CLR命名空间中定义了相同的类,但没有XML命名空间:

错误:反映类型为“BigHammer.CINParser.Messages.Declarations”的错误。    - 类型'BigHammer.CINParser.Messages.Declarations'和'BigHammer.CINParser.Messages.urn_ean_ucc_2.Declarations'都使用来自命名空间''的XML类型名称'Declarations'。使用XML属性为类型指定唯一的XML名称和/或命名空间。

2 个答案:

答案 0 :(得分:2)

序列化仅适用于实例数据。

Static / Const是绑定到类的数据。

例如,在给定的应用程序域中,Declarations.SchemaVersion只能是单个值。因此没有要序列化的实例数据。

答案 1 :(得分:0)

Xml序列化程序仅序列化属性。

包装您的变量。

class Cro
{
     public Cro
     {
          _atia="my const value";
     }
     private string _atia; // won't be serialized
     public string Atia //  will be serialized
     {
          get
          {
               return _atia;
          }
     }
}