2

是否可以采用复杂类“A”,它表示带有附加信息的基元类型 - 例如该基元的有效值,在“B”中包含“A”的实例,以及 XML 用“A”序列化“B” "只作为它的原始类型出现?

Class A<T> {
  T obj;
  Static  ValidValue<T>[] validValues;
}

Class B {
  A<int> intVal;
  A<string> stringVal;
}

所需的输出只是原语。ValidValues 将用于在反序列化后验证数据:

  <B>
    <A>1</A>
    <A>example</A>
  </B>
4

3 回答 3

3

您是否尝试过使用财产?

public class B {
  private A<int> intVal;
  public int IntVal{
    get{
      return intVal.obj;
    }
    set{
      intVal.obj = value;
    }
  }

  // same for stringval
}

据我所知 xmlserializer 只会序列化公共属性。所以它应该工作。

不过我可能误解了你的要求。

于 2013-04-26T02:33:04.060 回答
1

这很容易做到DataContracts

您只需要[DataContract]在类上放置一个属性,然后用属性装饰您想要序列化的字段或[DataMember]属性。您可以通过这种方式序列化私有字段。

请参阅此处了解如何序列化这样的装饰类

这是可选的,即只有您用来装饰的物品[DataMember]才会被序列化。

例如(来自此处的 MSDN 示例):

[DataContract]
public class Person
{
    // This member is serialized.
    [DataMember]
    internal string FullName;

    // This is serialized even though it is private.
    [DataMember]
    private int Age;

    // This is not serialized because the DataMemberAttribute 
    // has not been applied.
    private string MailingAddress;

    // This is not serialized, but the property is.
    private string telephoneNumberValue;

    [DataMember]
    public string TelephoneNumber
    {
        get { return telephoneNumberValue; }
        set { telephoneNumberValue = value; }
    }
}
于 2013-04-26T06:17:26.590 回答
0

您可以使用自定义序列化来控制要序列化的变量。然后,您可以将所需的任何值发送到序列化对象。

请参阅http://msdn.microsoft.com/en-us/library/ty01x675(v=vs.80).aspx

于 2013-04-26T02:40:39.810 回答