GVKun编程网logo

php – 为什么我不应该将序列化数组插入我的数据库字段?(不能序列化)

3

最近很多小伙伴都在问php–为什么我不应该将序列化数组插入我的数据库字段?和不能序列化这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c#–我不知道为什么我的班级无法序列化、jav

最近很多小伙伴都在问php – 为什么我不应该将序列化数组插入我的数据库字段?不能序列化这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c# – 我不知道为什么我的班级无法序列化、java – 为什么我不应该使用equals继承?、java中,将序列化后的数据放入redis中;序列化一般用的什么插件呢?、linux – 为什么我不能进入我的新EC2实例?等相关知识,下面开始了哦!

本文目录一览:

php – 为什么我不应该将序列化数组插入我的数据库字段?(不能序列化)

php – 为什么我不应该将序列化数组插入我的数据库字段?(不能序列化)

我刚刚看到对这个问题Inserting into a serialized array in PHP的第一个评论,它让我想知道为什么?特别是当您使用数据库管理会话(基于数据库的会话处理)时,会发生这种情况,会话处理程序将序列化数组插入到数据库字段中.

解决方法:

在某些情况下,这没有任何问题.会话管理绝对是可以接受的情况之一.需要记住的是,如果您发现自己试图将序列化数据与数据库中的任何字段之间的数据联系起来,那么您就会遇到巨大的设计缺陷,不幸的是,这是我见过的人们试图做的事情.

任何“永远不要做x”与一粒盐,因为几乎任何技术在某些情况下都是正确的.建议通常针对那些非常容易误解正确用法并将自己编码到一个非常讨厌的角落的新手.

c# – 我不知道为什么我的班级无法序列化

c# – 我不知道为什么我的班级无法序列化

我完成了我的申请编码.但是,当我点击开始按钮时,我的应用程序引发了一个例外..:'(
A first chance exception of type 'System.Runtime.Serialization.InvalidDataContractException' occurred in System.Runtime.Serialization.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
A first chance exception of type 'System.Runtime.Serialization.InvalidDataContractException' occurred in System.Runtime.Serialization.dll

所以我看到’Application_UnhandledException’的参数e,我可以知道原因.
“’Type’GPACalculator.Subject’无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.”

我只是使用默认数据类型来创建我的类.

public class Subject : INotifyPropertyChanged
{
    private string name;
    private GradePoint gradePoint;
    private int credit;

    public Subject(string name)
    {
        Name = name;
        GradePoint = new GradePoint();
    }

    public string Name
    {
        get { return name; }
        set
        {
            Debug.WriteLine("Name: " + value);
            if (name != value)
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }

    }

    public GradePoint GradePoint
    {
        get { return gradePoint; }
        set
        {
            if (gradePoint != value)
            {
                gradePoint = value;
                OnPropertyChanged("GradePoint");
            }
        }
    }

    public int Credit
    {
        get { return credit; }
        set
        {
            if (credit != value)
            {
                credit = value;
                OnPropertyChanged("Credit");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
    }
}


public class GradePoint : INotifyPropertyChanged
{
    private string mainGradePoint;
    private string subGradePoint;
    private int credit;

    public int Credit
    {
        get { return credit; }
        set
        {
            if (credit != value)
            {
                credit = value;
                OnPropertyChanged("Credit");
            }
        }
    }

    public string MainGradePoint
    {
        get { return mainGradePoint; }
        set
        {
            value = value.toupper();
            if (mainGradePoint != value)
            {
                mainGradePoint = value;
                OnPropertyChanged("MainGradePoint");
            }
        }
    }

    public string SubGradePoint
    {
        get { return subGradePoint; }
        set
        {
            if (subGradePoint != value)
            {
                subGradePoint = value;
                OnPropertyChanged("SubGradePoint");
            }
        }
    }

    public override string ToString()
    {
        return string.Format("{0}{1}",mainGradePoint,subGradePoint);
    }

    public double Todouble(double perfectscore = 4.5F)
    {
        double gap = perfectscore - Math.Floor(perfectscore);
        double value;


        switch (mainGradePoint)
        {
            case "A":
                value = 4.0;
                break;
            case "B":
                value = 3.0;
                break;
            case "C":
                value = 2.0;
                break;
            case "D":
                value = 1.0;
                break;
            default:
                value = 0.0;
                return value;
        }

        switch (subGradePoint)
        {
            case "+":
                value += gap;
                break;
            case "-":
                value -= gap;
                break;
        }

        return value;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
    }
}

以上是我的班级..

请帮我

解决方法

首先使用您要使用的序列化程序的相应属性来修饰类,例如: [Serializable]用于BinaryFormatter,或[DataContract]用于基于合同的格式化程序.

注意:如果使用[Serializable]属性,请记住使用[field:NonSerialized]标记事件字段,否则这些事件的所有侦听器也将被序列化.

java – 为什么我不应该使用equals继承?

java – 为什么我不应该使用equals继承?

当我读了一本 Java书时,作者曾经说过,在设计一个类时,使用equals()与继承通常是不安全的.例如:
public final class Date {
    public boolean equals(Object o) {
         // some code here
    }
}

在上面的类中,我们应该把final,所以其他类不能继承.我的问题是,为什么允许另一个类继承自己是不安全的?

解决方法

因为很难(不可能?)使它正确,尤其是 symmetric property.

说你有班车和班车延长车.如果参数也是车辆并且具有相同的权重,Vehicle.equals()将成立.如果你想实现Car.equals(),它应该只有在参数也是一个车,而不是重量的时候应该产生一个真实值,它也应该比较make,引擎等.

现在想象下面的代码:

Vehicle tank = new Vehicle();
Vehicle bus = new Car();
tank.equals(bus);  //can be true
bus.equals(tank);  //false

如果巧合坦克和公共汽车重量相同,则首次比较可能会产生真实性.但是由于坦克不是一辆车,所以将它与汽车进行比较,总是会产生错误.

你几乎没有工作:

> strict:当且仅当它们具有完全相同的类型(并且所有属性相等)时,两个对象相等.这是坏的,例如当你的子类几乎没有添加一些行为或装饰原始类.一些框架是子类化你的类,没有你注意到(Hibernate,Spring AOP与cglib代理…)@H_301_21@> loose:如果两个对象的类型是“兼容的”,并且它们具有相同的内容(语义上),则两个对象相等.例如.如果它们包含相同的元素,两个集合是相等的,那么一个是HashSet并且另一个是TreeSet并不重要(感谢@veer指出这一点).

这可能是误导.采用两个LinkedHashSets(插入订单作为合同的一部分).然而,由于equals()仅考虑了原始Set合同,所以即使对于明显不同的对象,比较也将成为true:

Set<Integer> s1 = new LinkedHashSet<Integer>(Arrays.asList(1,2,3));
Set<Integer> s2 = new LinkedHashSet<Integer>(Arrays.asList(3,1));
System.out.println(s1.equals(s2));

也可以看看

> Java Basics Part 2: Equality and inheritance

java中,将序列化后的数据放入redis中;序列化一般用的什么插件呢?

java中,将序列化后的数据放入redis中;序列化一般用的什么插件呢?

java中,将序列化后的数据放入redis中;序列化一般用的什么插件呢?

性能比较高效的,不用java自带的Serializable!

谢谢

linux – 为什么我不能进入我的新EC2实例?

linux – 为什么我不能进入我的新EC2实例?

我创建了一个新实例(来自亚马逊的小型64位AMI linux)
创建了一个名为“mir”的新密钥对.
我下载了mir.pem并将其放在我的〜/ .ssh文件夹中.
我甚至做了ssh-add mir.pem.

然后我试着ssh ubuntu @ public_DNS_from_amazon

为什么不起作用??

解决方法

尝试ssh ubuntu@your.host.name -i your-private.key,而不是ssh-添加密钥.

哦,并确保您通过安全组允许TCP端口22.

我们今天的关于php – 为什么我不应该将序列化数组插入我的数据库字段?不能序列化的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – 我不知道为什么我的班级无法序列化、java – 为什么我不应该使用equals继承?、java中,将序列化后的数据放入redis中;序列化一般用的什么插件呢?、linux – 为什么我不能进入我的新EC2实例?的相关信息,请在本站查询。

本文标签: