簡體   English   中英

從wcf中刪除不必要的xsi和xsd命名空間

[英]Remove unnecessary xsi and xsd namespaces from wcf

我建立了一個運行良好的Web服務,除了我試圖刪除xsi和xsd命名空間。

我看到很多鏈接顯示我必須使用這樣的自定義序列化程序:

XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);

但是我找不到在我的代碼中實現此方法的方法。 這是我的代碼:

[ServiceContract, XmlSerializerFormat]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyUser
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "getUserInfo?token={userId}", BodyStyle = WebMessageBodyStyle.Bare)]
    public PersonnResponse ValidateToken(string userId)
    {
        var response = new PersonnResponse();
        response.userId = userId;
        response.firstName = myOtherServiceGetFirstName(userId);
        response.lastName = myOtherServiceGetLastName(userId);
        return response;
    }

[DataContract(Name = "person", Namespace = "")]
public class PersonnResponse
{
    [DataMember(Name = "userId", EmitDefaultValue = false)]
    public string userId { get; set; }

    [DataMember(Name = "firstName", EmitDefaultValue = false)]
    public string firstName { get; set; }

    [DataMember(Name = "lastName", EmitDefaultValue = false)]
    public string lastName { get; set; }
}

為了得到您想要的東西,您應該實現IXmlSerializable

[DataContract(Name = "person", Namespace = "")]
public class PersonnResponse:IXmlSerializable
{
   ...

     public XmlSchema GetSchema()
    {
        return null;
    }


    public void ReadXml (XmlReader reader)
    {
        var xd = XDocument.Load(reader);
        firstName = xd.Descendants().First (x => x.Name.LocalName == "firstName" ).Value;
        lastName = xd.Descendants().First (x => x.Name.LocalName == "lastName" ).Value;
        userId = xd.Descendants().First (x => x.Name.LocalName == "userId" ).Value;
    }

    public void WriteXml(XmlWriter writer){


        writer.WriteElementString("userId", userId);
        writer.WriteElementString("firstName", firstName);
        writer.WriteElementString("lastName", lastName);

    }
}
public class Test
{
    static void Main()
    {
        Test t = new Test();
        t.Serialize();
    }

    private void Serialize()
    {
        // Create an instance of the class, and an 
        // instance of the XmlSerializer to serialize it.
        var pers = new PersonnResponse(){ firstName="Call Me", lastName="Heisenberg", userId="Id"};
        XmlSerializer ser = new XmlSerializer(typeof(PersonnResponse));

        StringWriter tw = new StringWriter();
        ser.Serialize(tw,pers);
        Console.WriteLine(tw.ToString());

        //Deserialize from XML string
        var sw = new StringReader(tw.ToString());
        var NewPerson = ser.Deserialize(sw);

    }
}

您將最終得到如下所示的XML:

<?xml version="1.0" encoding="utf-16"?>
<PersonnResponse>
  <userId>Id</userId>
  <firstName>Call Me</firstName>
  <lastName>Heisenberg</lastName>
</PersonnResponse>

暫無
暫無

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

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