簡體   English   中英

定制的xml序列化

[英]Customized xml serialization

在我的應用程序中,我將收到一些創建數據的請求,並創建如下的請求類,

 public class SaveUser
{
    public string Comments { get; set; }
    public int CustomerNumber { get; set; }
    public string Password { get; set; }
    public string Username { get; set; }
    public User1 User { get; set; }

}

public class User1
{
    public string City { get; set; }
    public string Country { get; set; }
    public string Email { get; set; }
    public string MobileNumber { get; set; }
    public string Name { get; set; }
    public string Password { get; set; }
    public string StreetAddress { get; set; }
    public int UserId { get; set; }
    public string Username { get; set; }
    public string ZipCode { get; set; }
}

並序列化我在下面的代碼中使用的請求,

public static string SerializeToXml<T>(T obj)
        {

            // out this extraneous xml.
            // StringWriter Output = new StringWriter(new StringBuilder());
            string result;
            XmlSerializer ser = new XmlSerializer(typeof(T));

            using (StringWriter Output = new StringWriter(new StringBuilder()))
            {
                ser.Serialize(Output, obj);
                result = Convert.ToString(Output);
            }
            return result;

        }

我沒有得到預期的結果,是否有任何方法可以自定義序列化以獲取以下xml格式,

<SaveUser xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mywebsite.no/webservice/types">
  <Comments>String</Comments>
  <CustomerNumber>222</CustomerNumber>
  <Password>test</Password>
  <Username>Sangeetha</Username>
  <User xmlns:d2p1="http://schemas.datacontract.org/2004/07/mywebsite.Engine.Engine.Types">
    <d2p1:City>String</d2p1:City>
    <d2p1:Country>String</d2p1:Country>
    <d2p1:CustomerNumber>0</d2p1:CustomerNumber>
    <d2p1:Email>test.mp@gmail.com</d2p1:Email>
    <d2p1:MobileNumber>91-1234567890</d2p1:MobileNumber>
    <d2p1:Name>Sangeetha</d2p1:Name>
    <d2p1:Password>test</d2p1:Password>
    <d2p1:StreetAddress>String</d2p1:StreetAddress>
    <d2p1:UserId>0</d2p1:UserId>
    <d2p1:Username>Sangeetha</d2p1:Username>
    <d2p1:ZipCode>560068</d2p1:ZipCode>
  </User>
</SaveUser>

關於Sangeetha

您可以首先在數據類上添加名稱空間屬性:

[XmlRoot(Namespace = "http://www.mywebsite.no/webservice/types")]
public class SaveUser
{
   ...
}

[XmlType(Namespace = "http://schemas.datacontract.org/2004/07/mywebsite.Engine.Engine.Types")]
public class User1
{
   [XmlNamespaceDeclarations]
   public XmlSerializerNamespaces xmlns;
   ...
}

編輯 :請注意,您需要向User1類添加具有XmlNamespaceDeclarations屬性的附加xmlns成員,以便可以在序列化期間指定實際的名稱空間。

然后,將這些名稱空間添加到serializer方法中,如下所示:

SaveUser user = new SaveUser...; // create SaveUser object
user.User = new User1...; //create User1 object
// **EDIT**: instantiate and add your namespace to User1 here...
user.User.xmlns = new XmlSerializerNamespaces();
user.User.xmlns.Add("d2p1", "http://schemas.datacontract.org/2004/07/mywebsite.Engine.Engine.Types");

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "http://www.mywebsite.no/webservice/types");
ns.Add("i", "http://www.w3.org/2001/XMLSchema-instance");

XmlSerializer s = new XmlSerializer(typeof(SaveUser));
StreamWriter w = new StreamWriter("Your XML File");
s.Serialize(w, user, ns);
w.Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM