使用 DataContractSerializer 时删除 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

Posted

技术标签:

【中文标题】使用 DataContractSerializer 时删除 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"【英文标题】:remove xmlns:i="http://www.w3.org/2001/XMLSchema-instance" when using DataContractSerializer 【发布时间】:2014-05-30 23:39:31 【问题描述】:

如何在使用 DataContractSerializer 时删除 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"。

这就是我得到的:

<ProfileModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Email>wolverine@wolverine.com</Email>
  <FirstName>wolverine</FirstName>
  <ID>ty1002225</ID>
  <LastName>wolverine3</LastName>
  <PhoneNumber>66332214477</PhoneNumber>
  <SourceSystem>TY</SourceSystem>
</ProfileModel>

我想得到这样的东西:

<ProfileModel>
      <Email>wolverine@wolverine.com</Email>
      <FirstName>wolverine</FirstName>
      <ID>ty1002225</ID>
      <LastName>wolverine3</LastName>
      <PhoneNumber>66332214477</PhoneNumber>
      <SourceSystem>TY</SourceSystem>
    </ProfileModel>

这是我的模型:

[DataContract(Namespace = "")]
    public class CRMProfileModel
    
        [DataMember]
        public string FirstName  get; set; 
        [DataMember]
        public string LastName  get; set; 
        [DataMember]
        public string Email  get; set; 
        [DataMember]
        public string PhoneNumber  get; set; 
        [DataMember]
        public string SourceSystem  get; set; 
        [DataMember]
        public string ID  get; set; 
    

我试图避免使用字符串替换来删除它。

【问题讨论】:

您可以在这里找到答案:***.com/a/8061839/3383479 @Inanikian Op 使用的是 DataContractSerializer,而不是 XmlSerializer @rcadaoas 你有没有找到一种不用字符串替换的方法?我花了一些时间研究这个,但从我发现的一切来看,这似乎是不可能的。 @CrnaStena,不幸的是,我仍然选择了字符串替换方法。 您需要使用自定义序列化程序。 【参考方案1】:

如何在使用 DataContractSerializer 时删除 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"。

    hii Romeo...我也尝试了几个小时来删除 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"。

    终于找到了最好的,希望对你有帮助

    public IHttpActionResult Post([FromBody]MessageResponse 值)

 var messageresponse =new CRMProfileModel().....;
DataContractSerializer doc = new  DataContractSerializer(messageresponse.GetType());  
MemoryStream ms = new MemoryStream();
 dcs.WriteObject(ms, messageresponse); 
var i = Encoding.UTF8.GetString(ms.ToArray()); 
var r = i.Replace("xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"","");
var ss = new XmlDocument(); 
ss.LoadXml(r);
return Content(HttpStatusCode.OK, ss.DocumentElement, Configuration.Formatters.XmlFormatter);

【讨论】:

OP 要求“替换”以外的解决方案:我试图避免使用字符串替换来删除它。

以上是关于使用 DataContractSerializer 时删除 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"的主要内容,如果未能解决你的问题,请参考以下文章

使用 DataContractSerializer 时设置属性的初始值

使用 DataContractSerializer 和 XmlDictionaryWriter 序列化 JObject 后崩溃

在原语列表上使用 DataContractSerializer 的自定义元素名称

使用 DataContractSerializer 的接口中的显式类型

使用 DataContractSerializer 序列化没有命名空间的对象

如何使用 DataContractSerializer 从 XMLDocument 的单个节点反序列化?