标签: serializer

Django REST Serializer方法可写字段

我正在阅读Django REST Framework,我有一个使用SerializerMethodField()与getter序列化的模型.

但是,当我POST到此端点时,我希望能够设置此字段,但这不起作用,因为正如上面的文档所示,您无法写入SerializerMethodField.Django REST中是否有任何方法可以为您定义自定义getter方法的序列化器字段,以及自定义setter方法?

编辑:这是我正在尝试做的事情的来源.客户与用户具有一对一的关系.

class ClientSerializer(serializers.ModelSerializer):
    email = serializers.SerializerMethodField()

    def create(self, validated_data):
        email = validated_data.get("email", None) # This doesn't work because email isn't passed into validated_data because it's a readonly field
        # create the client and associated user here


    def get_email(self, obj):
        return obj.user.email

    class Meta:
        model = Client
        fields = (
            "id",
            "email",
        )
Run Code Online (Sandbox Code Playgroud)

django rest serializer django-rest-framework

12
推荐指数
3
解决办法
5541
查看次数

使用自定义非规范化器对嵌套对象进行Symfony 2非规范化

在这里,我正在为REST API构建Symfony SDK.大多数数据都是具有嵌套的其他JSON对象的JSON对象.像这儿

{
    "id": "eng_pl",
    "name": "Premier League",
    "_links": {
        "self": {
            "href": "/tournaments/eng_pl"
        },
        "seasons": {
            "href": "/tournaments/eng_pl/seasons/"
        }
    },
    "coverage": {
        "id": "eng",
        "name": "England",
        "_links": {
            "self": {
                "href": "/territories/eng"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

反序列化必须生成一个与下面列出的代码生成的对象相等的对象:

$tournament = new Tournament();
$tournament->setId('eng_pl');
$tournament->setName('Premier League');

$coverage = new Territory();
$coverage->setId('eng');
$coverage->setName('England');

$tournament->setCoverage($coverage);
Run Code Online (Sandbox Code Playgroud)

我正在使用我自己的自定义Denormalizers,在Tournament对象的denormalizer代码片段下面:

class TournamentDenormalizer implements DenormalizerInterface
{

    /**
     * @inheritdoc
     */
    public function supportsDenormalization($object, $type, $format = null)
    {

        if ($type != Tournament::class) {
            return false;
        } …
Run Code Online (Sandbox Code Playgroud)

php json serializer symfony

12
推荐指数
1
解决办法
1938
查看次数

这些数据是否被其他组件覆盖?

我正在使用symfony组件在Silex中进行一些编程,我想我发现了它symfony/serializersymfony/validator组件的错误.

首先让我解释一下我要实现的目标,然后让我们去看看代码.我的目标是使用序列化指令和验证指令等信息来注释类.由于读取这些注释可能需要花费很少的cpu,我喜欢将它们缓存在内存中.为此,我在Doctrine/Common/Cache包中使用了memcache包装器.

我面临的问题是,使用类名作为键symfony/serializer,symfony/validator将元数据写入缓存.当他们稍后尝试检索元数据时,会抛出异常,因为缓存具有无效的元数据,或者是Symfony\Component\Validator\Mapping\ClassMetadata或的实例Symfony\Component\Serializer\Mapping\ClassMetadataInterface.

以下是一个可重复的例子(对不起,如果它的大,我试图做尽可能小):

use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;

class Foo
{
    /**
     * @var int
     * @Assert\NotBlank(message="This field cannot be empty")
     */
    private $someProperty;

    /**
     * @return int
     * @Groups({"some_group"})
     */
    public function getSomeProperty() {
        return $this->someProperty;
    }
}


use Doctrine\Common\Annotations\AnnotationReader;
use \Memcache as MemcachePHP;
use Doctrine\Common\Cache\MemcacheCache as MemcacheWrapper;

$loader = require_once __DIR__ . '/../vendor/autoload.php';

\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader([$loader, 'loadClass']);

$memcache = new MemcachePHP();

if (! $memcache->connect('localhost', …
Run Code Online (Sandbox Code Playgroud)

php validation serializer symfony silex

12
推荐指数
1
解决办法
279
查看次数

自定义WCF DataContractSerializer

是否可以使用我自己的序列化程序替换Windows Communication Foundation中的dataContractSerializer.如果有可能,我该如何实现?

.net wcf serializer

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

如何在Symfony Serializer中反序列化对象数组?

是否可以Symfony Serializer反序列化属性中的对象数组?我有一个Boss$Npc = []需要持有一个Npc对象数组的属性.我确实在文档中看到了一些示例,但他们没有说明此功能.我有一个带有NPC数组的json字符串例如:

class Boss {

    private $Npc = [];    

    /**
    * @return Npc[]
    */
    public function getNpcs(): array
    {
        return $this->npcs;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用的是php7.1和symfony/serializer版本^ 3.3.

编辑:我已经尝试过PhpDocExtractor,但它不会让我安装它.:(

编辑:这是一个可能的JSON值:

{
    "bossname": "Epic boss!",
    "npcs": [{
        "id": 24723,
        "name": "Selin Fireheart",
        "urlSlug": "selin-fireheart",
        "creatureDisplayId": 22642
    }]
}
Run Code Online (Sandbox Code Playgroud)

php serializer symfony

10
推荐指数
4
解决办法
4590
查看次数

为什么Json.Net在序列化时会在我的对象上调用Equals方法?

我在使用Newtonsoft.Json SerializeObject方法时遇到了一个错误.之前有人问过这个问题,但与Newtonsoft合作的人没有回答为什么会这样.

基本上,这样打电话时SerializeObject:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(from, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
Run Code Online (Sandbox Code Playgroud)

Equals在我的类中覆盖了很多方法中的错误:

public override bool Equals(object obj)
{
    if (obj == null)
        return false;

    CapacityConfiguration cc = (CapacityConfiguration)obj; // <-- TypeCastException here; other Properties of the same class are sent in as parameter!
}
Run Code Online (Sandbox Code Playgroud)

当然,通过这样检查,我意识到修复起来很"容易":

public override bool Equals(object obj)
{
    if (obj is CapacityConfiguration == false)
        return false;

    CapacityConfiguration cc = (CapacityConfiguration)obj;
}
Run Code Online (Sandbox Code Playgroud)

但真正的问题是: 为什么Json.Net在类的Equals方法中发送其他类型的对象?更具体地说,Json.Net似乎在类中发送了许多其他属性,而不是相同类型的另一个对象.

对我来说,这完全是奇怪的.任何输入将不胜感激. …

c# json equals serializer json.net

9
推荐指数
1
解决办法
652
查看次数

无法从String值构造java.util.Date的实例 - 不是有效的表示形式

很抱歉这似乎是一个多余的问题,但我确实有很多选择,尽管我努力阅读了十几个主题,但我无法理解该怎么做.

我有一个java应用程序,其工作是:

  1. 从SOAP WS(XML)获取数据,
  2. 做一些逻辑(传入的deliverydate将成为datebl)
  3. 最后将其发送到REST WS(JSON格式),它将更新Oracle表

计划如下:
SOAP WS ---- deliverydate ----> JAVA APP(逻辑)---- datebl ----> REST WS

在Java应用程序是使用的JAR jackson-core-asl-1.9.13.jarjackson-mapper-asl-1.9.13.jar等等.

我遇到的问题是处理日期.

读物:(试图受到启发但杰克逊版似乎不一样):

JSON以自定义格式序列化日期(无法从String值构造java.util.Date的实例)

Jackson 2.3.2:尽管将日期格式设置为ObjectMapper,但仍然会对Date进行反序列化

编辑01/04/15

http://jackson-users.ning.com/forum/topics/cannot-deserialize-a-date

现在的事实

要点1: 从SOAP WS恢复数据时,deliverydate是一个String,其精确值为:

2014-07-31 07:00:00.0

第2点: 在使用setter之前,我认为将此String格式化为日期可能是个好主意.

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                    Date dateebl = dateFormat.parse(deliverydate);
                                    msi.setDatebl(dateebl);
Run Code Online (Sandbox Code Playgroud)

POJO中的datebl声明

private java.util.Date    datebl;
Run Code Online (Sandbox Code Playgroud)

在此阶段,datebl值已转换为

Thu Jul 31 07:00:00 CEST 2014

(尽管选择具体格式yyyy-MM-dd HH:mm:ss)

点3和错误我有:我 的错误由其余服务器抛出:

无法从字符串值'Thu Jul 31 07:00:00 CEST 2014'构造java.util.Date的实例:不是有效的表示形式(错误:无法解析日期"Thu Jul 31 07:00:00 CEST 2014":不符合任何标准形式("yyyy-MM-dd'T'HH:mm:ss.SSSZ","yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","EEE, dd MMM yyyy …

java date serializer jackson

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

需要Jackson序列化器用于Double,需要在运行时指定精度

关于为数字,货币等创建Jackson序列化器的帖子很多.对于工程应用,通常需要根据单位或其他标准设置数字的精确度.

例如,空间坐标可能会被限制在小数点后的5或6位数,并且温度可能会被限制在小数点后的2位数.具有太多数字或截断指数表示法的默认序列化程序行为并不好.我需要的是:

@JsonSerialize(using=MyDoubleSerializer.class, precision=6) double myValue;
Run Code Online (Sandbox Code Playgroud)

并且更好地能够在运行时指定精度.我也在使用MixIn.我可以为每个类编写一个序列化程序,但希望指定具体的值.

任何想法,将不胜感激.

java json serializer jackson

7
推荐指数
1
解决办法
7489
查看次数

结合序列化器和模型功能

我有两个序列化器... MyRegisterSerializer继承并扩展了流行的应用程序/程序包django-rest-auth,该程序/程序包连接到相当标准的用户表。我还为定制应用程序TeamSerializer(与用户一对多关系)提供了模型和序列化器。当用户注册时,我希望他们能够同时加入一个团队,因此我需要以某种方式创建一个团队,返回团队ID,然后将该ID传递给RegisterSerializer,以便团队可以存储在用户表中。我知道我可以打两次电话,首先创建团队并返回值,然后将其传递给寄存器序列化器,但是有没有办法在一个序列化器中完成所有这些工作?我是python的n00b使用者,考虑到我必须按get_cleaned_data()原样返回函数,因此找不到很好的示例。谢谢!

class TeamSerializer(serializers.ModelSerializer):

  class Meta:
    model = Team
    fields = ('id', 'name', 'logo', 'user')

class MyRegisterSerializer(RegisterSerializer):
  first_name = serializers.CharField()
  last_name = serializers.CharField()

  def get_cleaned_data(self):
    super(MyRegisterSerializer, self).get_cleaned_data()
    return {
        'team_id': <How do I get this value>
        'username': self.validated_data.get('username', ''),
        'position': self.validated_data.get('password1', ''),
        'email': self.validated_data.get('email', ''),
        'first_name': self.validated_data.get('first_name', ''),
        'last_name': self.validated_data.get('last_name', '')
    }
Run Code Online (Sandbox Code Playgroud)

python django serializer django-allauth django-rest-auth

7
推荐指数
1
解决办法
151
查看次数

如何更改multiprocessing.mangers.BaseManager子类用于cPickle的序列化程序?

使用Python 2.7,

我使用从multiprocessing.managers派生的管理器跨进程传递许多大对象.BaseManager我想用cPickle串行器来节省时间; 如何才能做到这一点?我看到BaseManager初始化程序接受一个serializer参数,但唯一的选项似乎是picklexmlrpclib.

python serializer pickle multiprocessing

6
推荐指数
1
解决办法
222
查看次数