标签: serialization

JavaScriptSerializer.Deserialize - 如何更改字段名称

简介:在使用JavaScriptSerializer.Deserialize时,如何将JSON数据中的字段名称映射到.Net对象的字段名称?

更长版本:我从服务器API(未在.Net中编码)向我发送以下JSON数据

{"user_id":1234, "detail_level":"low"}
Run Code Online (Sandbox Code Playgroud)

我有以下C#对象:

[Serializable]
public class DataObject
{
    [XmlElement("user_id")]
    public int UserId { get; set; }

    [XmlElement("detail_level")]
    public DetailLevel DetailLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

其中DetailLevel是一个枚举,其中"低"作为其中一个值.

此测试失败:

[TestMethod]
public void DataObjectSimpleParseTest()
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    DataObject dataObject = serializer.Deserialize<DataObject>(JsonData);

    Assert.IsNotNull(dataObject);
    Assert.AreEqual(DetailLevel.Low, dataObject.DetailLevel);
    Assert.AreEqual(1234, dataObject.UserId);
}
Run Code Online (Sandbox Code Playgroud)

最后两个断言失败,因为这些字段中没有数据.如果我将JSON数据更改为

 {"userid":1234, "detaillevel":"low"}
Run Code Online (Sandbox Code Playgroud)

然后它通过.但我不能改变服务器的行为,我希望客户端类在C#语言中具有良好命名的属性.我不能使用LINQ to JSON,因为我希望它在Silverlight之外工作.看起来XmlElement标签没有任何效果.我不知道我在哪里知道它们是相关的,它们可能不是.

你如何在JavaScriptSerializer中进行字段名称映射?它可以完成吗?

c# serialization parsing json javascriptserializer

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

如何使用jquery序列化进行文件上传

所以我有一个表单,我使用jquery序列化函数通过ajax提交表单

        serialized = $(Forms).serialize();

        $.ajax({

        type        : "POST",
        cache   : false,
        url     : "blah",
        data        : serialized,
        success: function(data) {

        }
Run Code Online (Sandbox Code Playgroud)

但是如果表单有一个<input type="file">字段怎么办....如何使用这个ajax序列化方法将文件传递给表单...打印$ _FILES不输出任何内容

php ajax jquery serialization file-upload

72
推荐指数
7
解决办法
18万
查看次数

如何在C#中序列化Exception对象?

我试图在C#中序列化Exception对象.但是,似乎不可能,因为Exception类没有标记为[Serializable].有办法解决这个问题吗?

如果在执行应用程序期间出现问题,我希望被告知发生的异常.

我的第一反应是序列化它.

.net c# serialization exception

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

django-rest-framework 3.0在嵌套的序列化程序中创建或更新

使用django-rest-framework 3.0并拥有以下简单模型:

class Book(models.Model):
    title = models.CharField(max_length=50)


class Page(models.Model):
    book = models.ForeignKey(Books, related_name='related_book')
    text = models.CharField(max_length=500)
Run Code Online (Sandbox Code Playgroud)

并且给出了这个JSON请求:

{
   "book_id":1,
   "pages":[
      {
         "page_id":2,
         "text":"loremipsum"
      },
      {
         "page_id":4,
         "text":"loremipsum"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

如何编写嵌套的序列化程序来处理此JSON,并为page给定的每个JSON book创建新页面或更新(如果存在).

class RequestSerializer(serializers.Serializer):
    book_id = serializers.IntegerField()
    page = PageSerializer(many=True)


class PageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Page
Run Code Online (Sandbox Code Playgroud)

我知道用一个实例化序列化器instance会更新当前的序列化器,但我应该如何在create嵌套序列化器的方法中使用它?

python django serialization json django-rest-framework

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

数据库中的JSON与序列化数组

在MySQL数据库与序列化数组中存储JSON数据有哪些优缺点?

php mysql serialization mysql-json

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

如何在Java中测试一个类正确实现Serializable(不仅仅是Serializable的一个实例)

我正在实现一个可序列化的类(所以它是一个使用w/RMI的值对象).但我需要测试它.有办法轻松做到这一点吗?

澄清:我正在实现这个类,所以在类定义中坚持使用Serializable是微不足道的.我需要手动序列化/反序列化它以查看它是否有效.

我发现了这个C#问题,Java有类似的答案吗?

java serialization

70
推荐指数
2
解决办法
4万
查看次数

JSONResult to String

我有一个JsonResult工作正常,并从一些POCO返回JSON.我想将JSON保存为DB中的字符串.

public JsonResult GetJSON()
{
    JsonResult json = new JsonResult
    {
        Data = GetSomPocos()
    }; 
    return json;
}
Run Code Online (Sandbox Code Playgroud)

我需要审核响应,所以我想将其保存json到数据库中.我找不到将JSON作为字符串的方法.

任何帮助表示赞赏.

c# serialization json asp.net-mvc-2

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

Gson序列化POJO的ArrayList的麻烦

我一直在计划使用simpleXML来满足我的序列化需求,但我想我会尝试使用JSON来学习新的东西.

这是我用来尝试使用Gson 1.7.1序列化测试POJO的ArrayList的代码.

注意:我删除了字符串"s"的读/写器以简化代码.

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.google.gson.Gson;

public class TestGsonSerialDeserialList {
    public static void main(String[] args) throws IOException{
        Gson gson = new Gson();

        //Make Serial 
        String s;
        List<TestObject> list = Collections.synchronizedList(new ArrayList<TestObject>() );
        list.add(new TestObject());
        list.add(new TestObject());

        s = gson.toJson(list, ArrayList.class);
        System.out.println(s);

        //Eat Serial
        List<TestObject> list2 = Collections.synchronizedList(gson.fromJson(s, ArrayList.class) );
        System.out.println(list2.get(0) );
        System.out.println(list2.get(1) );
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

[{"objectID":1,"i1":12345,"name":"abcdefg","s":["a","b","c"]},{"objectID":2,"i1":12345,"name":"abcdefg","s":["a","b","c"]}]
java.lang.Object@5c74c3aa
java.lang.Object@75d9fd51
Run Code Online (Sandbox Code Playgroud)

对我的新手来说,这看起来是正确的.只有DeSerialized对象列表包含基本对象,而不是我序列化的TestObject.任何人都可以向我解释一下,如果有的话,我可以做些什么来使这项工作?

编辑:

更正测试:感谢ColinD

package test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; …
Run Code Online (Sandbox Code Playgroud)

java serialization json arraylist gson

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

Ruby对象和JSON序列化(没有Rails)

我试图理解Ruby中的JSON序列化格局.我是Ruby的新手.

如果您不使用Rails,是否有任何好的JSON序列化选项?

这似乎就是这个答案所针对的(对于Rails) 如何将Ruby对象转换为JSON

json gem看起来好像你必须编写自己的to_json方法.我无法让to_json处理数组和散列(文档说它适用于这些)是否有一个原因json gem不只是反映对象并使用默认的序列化策略?这不是如何to_yaml工作(猜测在这里)

ruby serialization json jsonserializer

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

忽略Json.net中的空字段

我有一些数据,我必须序列化为JSON.我正在使用JSON.NET.我的代码结构与此类似:

public struct structA
{
    public string Field1;
    public structB Field2;
    public structB Field3;
}

public struct structB
{
    public string Subfield1;
    public string Subfield2;
}
Run Code Online (Sandbox Code Playgroud)

问题是,我的JSON输出需要只有Field1OR Field2Field3- 它取决于使用哪个字段(即不为空).默认情况下,我的JSON看起来像这样:

{
    "Field1": null,
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {"Subfield1": null, "Subfield2": null},
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用NullValueHandling.Ignore,但这给了我看起来像这样的JSON:

{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {}
}
Run Code Online (Sandbox Code Playgroud)

而我需要的是:

{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来实现这一目标?

.net c# serialization json json.net

67
推荐指数
2
解决办法
5万
查看次数