首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用SoapFormatter序列化实体框架对象?

如何用SoapFormatter序列化实体框架对象?
EN

Stack Overflow用户
提问于 2016-03-08 18:37:33
回答 1查看 257关注 0票数 0

我希望序列化一个实体框架对象(用户),并使用典型的webClient.OpenWrite方法将其发送到php脚本。我不知道这是否是一种好方法,但我在SOAP对象序列化方面遇到了很多问题。

我最初的“用户”实体如下所示:

代码语言:javascript
复制
[Table("TableUsers")]
public class User
{
    public User()
    {
        Products = new HashSet<Product>();
    }
    public int Id { get; set; }

    [Required]
    [StringLength(4000)]
    [Index(IsUnique = true)]
    public string UserName { get; set; }

    [StringLength(4000)]
    public string UserCookie { get; set; }

    [StringLength(4000)]
    public string CompanyName { get; set; }
    ...
    public virtual ICollection<Product> Products { get; set; }
}

当我试图序列化所有这些东西并使用下一段代码将其发送到服务器时:

代码语言:javascript
复制
using (Stream postStream = Client.OpenWrite("http://test.com/analytics.php"))
{
    SoapFormatter formatter = new SoapFormatter();
    formatter.Serialize(postStream, user);
}
  1. 首先,我得到了一个未处理的异常,告诉我Soap序列化程序不支持序列化泛型类型.

好吧,好吧。我用SoapIgnore属性标记了产品集合。而且似乎这个属性不起作用,因为我得到了同样的错误。然后,我决定从用户类中删除用户构造函数,并选择了宾果!已执行序列化!(好吧,我可以在没有接口初始化的情况下生活)

代码语言:javascript
复制
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<i2:User_782DCAD431DFFDCAE6D6A91B7338AB23B0463133F84A5181874089B6BAEBDBC5 id="ref-1" xmlns:i2="http://test.com">
<User_x002B__x003C_Id_x003E_k__BackingField>6</User_x002B__x003C_Id_x003E_k__BackingField>
<User_x002B__x003C_UserName_x003E_k__BackingField id="ref-3">user@test.com</User_x002B__x003C_UserName_x003E_k__BackingField>...
  1. 我希望使我的soap查询更易读,并给它们实名(id名称,.)( insted of (AvitoUser_x002B__x003C_UserName_x003E_k__BackingField )和类似于MessageBodyMember(Name = "Name")这样的属性不起作用。我将我的类标记为Serializable,MessageContract,至今仍未发生任何更改。
  2. 最后,我使用了DataContract(Name = "User" )和DataMember(Name = "Name")等属性。结果,Fiddler给我看的只是它的一部分,而不是完整的soap信封!

这个soapFormatter有什么问题?为什么没有外泄?我应该如何标记所有这些类和属性,以生成一个打印得很好的soap查询?

EN

回答 1

Stack Overflow用户

发布于 2016-03-08 18:53:42

尝试将其放在上下文类中:

代码语言:javascript
复制
public class MyContext : DbContext 
{ 
    public MyContext() 
    { 
        this.Configuration.ProxyCreationEnabled = false; 
    }  
....
}

下面是包含更多详细信息的链接:https://msdn.microsoft.com/en-us/data/jj592886.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35875327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档