【问题标题】:XmlSerializer not serializing two enum attributesXmlSerializer 没有序列化两个枚举属性
【发布时间】:2014-01-20 22:17:09
【问题描述】:

我们目前正在尝试使用 XmlSerializer.Serialize 将一组对象序列化为 xml

我们已经使用以下存根测试了 XmlSerializer

private static void TestMethod()
{
    ChartContentConfig Config = new ChartContentConfig();
    Config.DefinitionId = "6790e2ca-be93-48dd-94e7-f8ec0f6e5fd4";
    Config.Sorts = null;
    Config.DataFields = new DataField[1];
    Config.DataFields[0] = new DataField()
    {
        Aggregator = AggregateFunction.Sum,
        ApplyFilter = ApplyFilter.Before,
        FieldName = "Hello",
        FieldType = typeof(decimal).ToString(),
        FilterToValue = "",
        FilterFromValue = "",
        FilterOperator = FilterOperator.None,
        IsVisible = false,
        DisplayName = "Hello",
        DefaultStyle = "DefaultFormat"
    };

    Type configType = typeof(DataField);
    DataField DataField = Config.DataFields[0];
    DataField.MarkerFormat = "MarkerFormatTest";
    DataField.SeriesColour = "SeriesColourTest";
    DataField.TestProperty = AggregateFunction.Average;
    DataField.Aggregator = AggregateFunction.Average;
    string test = SerializeConfig(DataField, configType).InnerXml;
    System.Diagnostics.Debug.WriteLine(test);
}

xml 返回正常,但是每个属性都与 Aggregator 和 ApplyFilter 的枚举分开显示。我们现在完全不知道是什么原因造成的,因为一切似乎都很好。以下是两者的定义。

[XmlAttribute]
public AggregateFunction Aggregator { get; set; }

[XmlAttribute]
public ApplyFilter ApplyFilter { get; set; }

带有标签的

[Serializable]
[DebuggerStepThrough]
[DesignerCategory("code")]
[GeneratedCode("xsd", "4.0.30319.1")]
[XmlRoot(Namespace = "", IsNullable = false)]

在该类的顶部。

枚举如下所示:

[Serializable]
[GeneratedCode("xsd", "4.0.30319.1")]
public enum AggregateFunction
{
    None = 0,
    Group = 1,
    Sum = 2,
    Max = 3,
    Min = 4,
    Average = 5,
    Count = 6,
    Project = 7,
    Value = 8,
}

[Serializable]
[GeneratedCode("xsd", "4.0.30319.1")]
public enum ApplyFilter
{
    OnDisplay = 0,
    BeforeGroup = 1,
    AfterGroup = 2,
}

任何帮助将不胜感激。

谢谢,

马特。

【问题讨论】:

  • 如果还有什么需要我补充的,请告诉我。
  • 要了解如何为 XML 序列化属性类型和成员,我发现使用 xsd.exe 和格式良好的 XML 模式来生成 C# 类结构是最简单的。 BTW [Serializable] 只适用于二进制序列化。
  • this SO question 是否相关?是否有任何 AggregateFunctionSpecified 或 ApplyFilterSpecified 属性?
  • 大约半小时前修复了这个问题,事实证明这正是答案。所以非常感谢。将其发布为答案,如果您愿意,我会为您标记?

标签: c# xml serialization xmlserializer


【解决方案1】:

当您使用 xsd.exe 从 XML 架构生成类时,对于每个使用非可空类型的可选属性,都会生成一个相应的布尔“指定”属性,该属性可用于控制是否输出该属性或应省略。

没有看到架构,我不能肯定地说,但我希望你的类有一个 AggregateFunctionSpecified 属性和一个 ApplyFilterSpecified 属性,需要设置为 true 才能输出属性。

【讨论】:

  • 我在这个问题上花了整整一个工作日!谢谢!
  • 感谢您,在我的项目中,它是一个以 ....FieldSpecified 为后缀的属性,我只是将其设置为 true 并且它起作用了。所以是 myPropFieldSpecified = true;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多