C#-XML仅将复杂类序列化为其基元类型

C#-XML仅将复杂类序列化为其基元类型,c#,xml-serialization,C#,Xml Serialization,是否可以采用一个复杂的类“a”,它表示一个带有附加信息的基元类型(例如该基元的有效值),在“B”中包含一个“a”的实例,并用XML序列化“B”,其中“a”仅作为其基元类型出现 Class A<T> { T obj; Static ValidValue<T>[] validValues; } Class B { A<int> intVal; A<string> stringVal; } A类{ T-obj; 静态有效值[]有效值

是否可以采用一个复杂的类“a”,它表示一个带有附加信息的基元类型(例如该基元的有效值),在“B”中包含一个“a”的实例,并用XML序列化“B”,其中“a”仅作为其基元类型出现

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

Class B {
  A<int> intVal;
  A<string> stringVal;
}
A类{
T-obj;
静态有效值[]有效值;
}
B类{
一个intVal;
斯特林瓦尔;
}
所需的输出只是原语。有效值将用于在反序列化后验证数据:

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

1.
例子

您是否尝试使用该属性

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

  // same for stringval
}
公共B类{
私人旅行社;
公共int IntVal{
得到{
返回intVal.obj;
}
设置{
intVal.obj=值;
}
}
//stringval也一样
}
据我所知,xmlserializer只会序列化公共属性。所以它应该会起作用


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

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

请参见

这很容易处理

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

这是选择性加入,即只有您用
[DataMember]
装饰的项目才会被序列化

例如():


这会奏效的。但是,我想封装这个行为,这样我就不需要为类中的每个变量都提供属性和字段。不过,我不确定自动映射。我没试过。对我来说,最简单的设计是最好的,这是最经济的事情。谢谢你的意见。问题是关于xml序列化的
[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; }
    }
}