标签: serialization

检测到实体框架自引用循环

我有一个奇怪的错误.我正在试验.NET 4.5 Web API,实体框架和MS SQL Server.我已经创建了数据库并设置了正确的主键和外键以及关系.

我创建了一个.edmx模型并导入了两个表:Employee和Department.一个部门可以有很多员工,这种关系存在.我使用scaffolding选项创建了一个名为EmployeeController的新控制器,以使用Entity Framework创建一个带有读/写操作的API控制器.在向导中,选择Employee作为模型,并选择数据上下文的正确实体.

创建的方法如下所示:

public IEnumerable<Employee> GetEmployees()
{
    var employees = db.Employees.Include(e => e.Department);
    return employees.AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)

当我通过/ api/Employee调用我的API时,出现此错误:

'ObjectContent`1'类型无法序列化内容类型'application/json的响应主体; ... ... System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"发生错误.","ExceptionMessage":"使用类型'System.Data.Entity.DynamicProxies检测到自引用循环.Employee_5D80AD978BC68A1D8BD675852F94E8B550F4CB150ADB8649E8998B7F95422552' .Path'[0] .Department.Employees'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":"...

为什么它自引用[0] .Department.Employees?这并没有多大意义.如果我在我的数据库中进行循环引用,我希望这会发生,但这是一个非常简单的例子.怎么可能出错?

c# serialization entity-framework-4 asp.net-web-api

100
推荐指数
10
解决办法
9万
查看次数

什么是JSON中的反序列化和序列化?

我是JSON的新手.现在,我需要为我的Flash ActionScript 3.0使用JSON.所以我找到了一个用于JSON的库,我看到了术语"反序列化"和"序列化".他们的意思是什么?

serialization json deserialization json-deserialization json-serialization

99
推荐指数
2
解决办法
10万
查看次数

使用Parcelable而不是序列化对象的好处

据我所知,Bundle并且Parcelable属于Android执行序列化的方式.例如,它用于在活动之间传递数据.但我想知道,如果在将Parcelable业务对象的状态保存到内部存储器的情况下使用而不是经典序列化有什么好处吗?它会比传统方式更简单或更快吗?我应该在哪里使用经典序列化以及哪里更好地使用捆绑包?

serialization android bundle parcelable

97
推荐指数
5
解决办法
4万
查看次数

如何在Intellij中生成串行版UID

当我使用Eclipse时,它有一个很好的功能来生成串行版本UID.

但是在IntelliJ中该怎么办?

如何在IntelliJ中选择或生成相同的串行版UID?

当你修改旧班时该怎么办?

如果您尚未指定id,则在运行时生成...

java serialization intellij-idea

97
推荐指数
3
解决办法
9万
查看次数

如何在不违反继承安全规则的情况下在.NET 4+中实现ISerializable?

背景:Noda Time包含许多可序列化的结构.虽然我不喜欢二进制序列化,但我们收到了许多支持它的请求,回到1.x时间线.我们通过实现ISerializable接口来支持它.

我们收到了最近一份关于Noda Time 2.x 在.NET Fiddle中失败的问题报告.使用Noda Time 1.x的相同代码工作正常.抛出的异常是这样的:

重写成员时违反了继承安全规则:'NodaTime.Duration.System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'.覆盖方法的安全性可访问性必须与被覆盖的方法的安全性可访问性相匹配.

我把它缩小到了目标框架:1.x目标.NET 3.5(客户端配置文件); 2.x的目标是.NET 4.5.它们在支持PCL与.NET Core和项目文件结构方面存在很大差异,但看起来这是无关紧要的.

我已经设法在本地项目中重现了这一点,但我还没有找到解决方案.

在VS2017中重现的步骤:

  • 创建新的解决方案
  • 创建一个面向.NET 4.5.1的新的经典Windows控制台应用程序.我称之为"CodeRunner".
  • 在项目属性中,转到签名并使用新密钥对程序集进行签名.取消密码要求,并使用任何密钥文件名.
  • 粘贴以下代码进行替换Program.cs.这是此Microsoft示例中代码的缩写版本.我保持所有路径相同,所以如果你想回到更完整的代码,你不应该改变其他任何东西.

码:

using System;
using System.Security;
using System.Security.Permissions;

class Sandboxer : MarshalByRefObject  
{  
    static void Main()  
    {  
        var adSetup = new AppDomainSetup();  
        adSetup.ApplicationBase = System.IO.Path.GetFullPath(@"..\..\..\UntrustedCode\bin\Debug");  
        var permSet = new PermissionSet(PermissionState.None);  
        permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));  
        var fullTrustAssembly = typeof(Sandboxer).Assembly.Evidence.GetHostEvidence<System.Security.Policy.StrongName>();  
        var newDomain = AppDomain.CreateDomain("Sandbox", null, adSetup, permSet, fullTrustAssembly);  
        var handle = …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization appdomain code-access-security

96
推荐指数
2
解决办法
6278
查看次数

DataContractSerializer不调用我的构造函数?

我刚刚意识到一些疯狂的东西,我认为这是完全不可能的:当反序列化一个对象时,DataContractSerializer不会调用构造函数!

以这门课为例,例如:

[DataContract]
public class Book
{
    public Book()
    { // breakpoint here
    }

    [DataMember(Order = 0)]
    public string Title { get; set; }
    [DataMember(Order = 1)]
    public string Author { get; set; }
    [DataMember(Order = 2)]
    public string Summary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我反序列化该类的对象时,不会触发断点.我完全不知道它是如何可能的,因为它是这个对象的唯一构造函数!

我假设编译器可能因为DataContract属性而生成了额外的构造函数,但我无法通过反射找到它...

所以,我想知道的是:如何在不调用构造函数的情况下创建我的类的实例?

注意:我知道OnDeserializing在反序列化开始时我可以使用该属性初始化我的对象,这不是我的问题的主题.

.net c# serialization constructor datacontractserializer

94
推荐指数
1
解决办法
2万
查看次数

$(this).serialize() - 如何添加值?

目前我有以下内容:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize(),
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想为数据添加一个值,所以我尝试了

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
});
Run Code Online (Sandbox Code Playgroud)

但这没有正确发布.关于如何将项添加到序列化字符串的任何想法?这是一个非特定于表单的全局页面变量.

jquery serialization

94
推荐指数
6
解决办法
9万
查看次数

如何反序列化时从json中删除k__BackingField

在将xml文件序列化为.net c#对象后,我在返回的json中获取k_BackingField.

我已经将DataContract和DataMember属性添加到.net c#对象中,但是在json,客户端没有得到任何结果.

[XmlRoot("person")]
[Serializable]
public class LinkedIn
{
    [XmlElement("id")]
    public string ID { get; set; }

    [XmlElement("industry")]
    public string Industry { get; set; }

    [XmlElement("first-name")]
    public string FirstName { get; set; }

    [XmlElement("last-name")]
    public string LastName { get; set; }
    [XmlElement("headline")]
}
Run Code Online (Sandbox Code Playgroud)

返回的json示例:

home: Object
<FirstName>k__BackingField: "Storefront"
<LastName>k__BackingField: "Doors"
Run Code Online (Sandbox Code Playgroud)

.net serialization json deserialization

94
推荐指数
6
解决办法
6万
查看次数

检测到JSON.Net自引用循环

我在4个表中为我的网站提供了一个mssql数据库.

我用这个时:

public static string GetAllEventsForJSON()
{
    using (CyberDBDataContext db = new CyberDBDataContext())
    {
        return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码导致以下错误:

Newtonsoft.Json.JsonSerializationException:为类型为"DAL.Cyber​​User"的属性"Cyber​​User"检测到自引用循环.路径'[0] .EventRegistrations [0] .Cyber​​User.UserLogs [0]'.

c# serialization json.net

94
推荐指数
8
解决办法
10万
查看次数

Gson自定义seralizer,用于使用TypeAdapter的对象中的一个变量(多个)

我见过很多使用自定义TypeAdapter的简单示例.最有帮助的是Class TypeAdapter<T>.但这还没有回答我的问题.

我想自定义对象中单个字段的序列化,让默认的Gson机制处理其余的事情.

出于讨论目的,我们可以将此类定义用作我希望序列化的对象的类.我想让Gson序列化前两个类成员以及基类的所有公开成员,并且我想为下面显示的第三个和最后一个类成员进行自定义序列化.

public class MyClass extends SomeClass {

@Expose private HashMap<String, MyObject1> lists;
@Expose private HashMap<String, MyObject2> sources;
private LinkedHashMap<String, SomeClass> customSerializeThis;
    [snip]
}
Run Code Online (Sandbox Code Playgroud)

java serialization gson

93
推荐指数
3
解决办法
2万
查看次数