【问题标题】:Serialize Partial DataContract序列化部分数据合约
【发布时间】:2010-10-29 21:21:44
【问题描述】:

我有一个如下所示的 DataContract:

    [DataContract(Name = User.Root, Namespace = "")]
  public class RegisterUser
  {
    [DataMember(Name = User.EmailAddress)]
    public string EmailAddress { get; set; }
    [DataMember(Name = User.UserName)]
    public string UserName { get; set; }
    [DataMember(Name = User.Password)]
    public string Password { get; set; }
    [DataMember(Name = User.FirstName)]
    public string FirstName { get; set; }
    [DataMember(Name = User.LastName)]
    public string LastName { get; set; }
    [DataMember(Name = User.PhoneNumber)]
    public string PhoneNumber { get; set; }
    [DataMember(Name = "RequestMessage")]
    public string RequestMsg { get; set; }
  }

我想从中提取元素。所以而不是 <ROOT> <Element1/>...</ROOT>。我只想得到<Element1/>(用于部分xsd验证)。

我想我可以使用这个功能:

public static string Serialize<T>(T obj)
{
  DataContractSerializer ser = new DataContractSerializer(obj.GetType());
  String text;
  using (MemoryStream memoryStream = new MemoryStream())
  {
    ser.WriteObject(memoryStream, obj);
    byte[] data = new byte[memoryStream.Length];
    Array.Copy(memoryStream.GetBuffer(), data, data.Length);
    text = Encoding.UTF8.GetString(data);
  }
  return text;
}

然后通过它

string str = Serialize(test.EmailAddress);

效果很好,但 xml 看起来像:

"<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">myemail.com</string>"

我丢失了 DataMember 信息。我怎样才能保留它?

【问题讨论】:

    标签: wcf xsd datacontractserializer datamember


    【解决方案1】:

    使用 WriteObjectContent 代替 WriteObject: http://msdn.microsoft.com/en-us/library/ms573853.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2013-06-19
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多