0

次のような 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 情報を失いました。また、どうすればそれを維持できますか?

4

1 に答える 1

0

WriteObject の代わりに WriteObjectContent を使用してください: http://msdn.microsoft.com/en-us/library/ms573853.aspx

于 2010-10-29T21:49:05.677 に答える