标签: javascriptserializer

.NET - 枚举的jSON序列化为字符串

我有一个包含enum属性的类,在使用时序列化对象时JavaScriptSerializer,我的json结果包含枚举的整数值而不是它的string"name".有没有办法让枚举作为string我的json而不必创建自定义JavaScriptConverter?也许有一个属性,我可以装饰enum定义,或对象属性,?

举个例子:

enum Gender { Male, Female }

class Person
{
    int Age { get; set; }
    Gender Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

期望的json结果:

{ "Age": 35, "Gender": "Male" }
Run Code Online (Sandbox Code Playgroud)

c# asp.net enums json javascriptserializer

1088
推荐指数
22
解决办法
42万
查看次数

如何使用C#在.NET中获取格式化的JSON?

我正在使用.NET JSON解析器,并希望序列化我的配置文件,以便它是可读的.所以代替:

{"blah":"v", "blah2":"v2"}
Run Code Online (Sandbox Code Playgroud)

我想要更好的东西:

{
    "blah":"v", 
    "blah2":"v2"
}
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

using System.Web.Script.Serialization; 

var ser = new JavaScriptSerializer();
configSz = ser.Serialize(config);
using (var f = (TextWriter)File.CreateText(configFn))
{
    f.WriteLine(configSz);
    f.Close();
}
Run Code Online (Sandbox Code Playgroud)

.net c# json javascriptserializer

234
推荐指数
12
解决办法
20万
查看次数

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万
查看次数

如何在JSON对象上序列化__type属性

我从a WebMethod中返回的每个对象都ScriptService被包装到一个JSON对象中,并且数据位于一个名为的属性中d.没关系.但我不希望将附加__type属性提供给客户端,因为我使用jQuery进行手动处理.

可能吗?

c# asp.net json asmx javascriptserializer

62
推荐指数
5
解决办法
3万
查看次数

错误CS0234:命名空间"System.Web"中不存在类型或命名空间名称"Script"

我想JavaScriptSerializer在我的应用程序中使用.

我最初收到了

找不到JavaScriptSerializer

我通过添加以下内容解决了

using System.Web.Script.Serialization;
Run Code Online (Sandbox Code Playgroud)

但是后面的子关键字Script用蓝线加下划线:

名称空间'System.Web'中不存在类型或命名空间'Script'(您是否缺少程序集引用?)

所以我在项目中添加了一个引用:

C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.Extensions.dll

这没有用.我仍然收到相同错误的蓝色下划线.引用标有感叹号黄色警告:

在此输入图像描述

我在这个帖子上尝试了建议的解决方案,但正如@ user781490指出的那样,他们在我的情况下没有帮助.

知道如何解决这个问题吗?

c# visual-studio-2010 jsonserializer javascriptserializer

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

JavaScriptSerializer可以排除具有null/default值的属性吗?

我正在使用JavaScriptSerializer来序列化一些实体对象.

问题是,许多公共属性包含null或默认值.有没有办法让JavaScriptSerializer排除属性为null或默认值?

我希望生成的JSON不那么冗长.

.net c# serialization json javascriptserializer

35
推荐指数
4
解决办法
3万
查看次数

使用JavaScriptSerializer()反序列化JSON文件

我将反序列化的json文件的结构如下所示;

{
    "id" : "1lad07",
    "text" : "test",
    "url" : "http:\/\/twitpic.com\/1lacuz",
    "width" : 220,
    "height" : 84,
    "size" : 8722,
    "type" : "png",
    "timestamp" : "Wed, 05 May 2010 16:11:48 +0000",
    "user" : {
        "id" : 12345,
        "screen_name" : "twitpicuser"
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个类,其字段名称为JavaScriptSerializer的属性.我将用于反序列化json的代码如下:

            using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {


                var responseBody = reader.ReadToEnd();
                var deserializer = new JavaScriptSerializer();
                var results = deserializer.Deserialize<Response>(responseBody);

            }
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何读取json文件上的用户字段.这就像下面;

"user" : {
    "id" : 12345,
    "screen_name" : "twitpicuser"
}
Run Code Online (Sandbox Code Playgroud)

它有子属性和值.我怎样才能在我的Response类中命名它们.我的回复课现在看起来像这样;

public class Response { …
Run Code Online (Sandbox Code Playgroud)

c# json javascriptserializer deserialization

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

如何在JSON序列化时使用JavaScriptSerializer设置格式?

我正在使用JavaScriptSerializer将文件的对象序列化为JSON格式.但结果文件没有可读格式.如何允许格式化以获取可读文件?

.net formatting serialization json javascriptserializer

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

将小数序列化为JSON,如何舍入?

我上课了

public class Money
{
    public string Currency { get; set; }
    public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并希望将其序列化为JSON.如果我使用JavaScriptSerializer我得到

{"Currency":"USD","Amount":100.31000}
Run Code Online (Sandbox Code Playgroud)

由于API我必须符合需要JSON数量最多两位小数,我觉得应该可以以某种方式改变JavaScriptSerializer序列化十进制字段的方式,但我不知道如何.还有就是SimpleTypeResolver你可以在构造函数中通过,但它只能在类型,只要我能理解工作.该JavaScriptConverter,您可以通过添加RegisterConverters(...)似乎是要进行Dictionary.

我想得到

{"Currency":"USD","Amount":100.31}
Run Code Online (Sandbox Code Playgroud)

在我序列化之后.此外,改为双倍是不可能的.我可能需要进行一些舍入(100.311应该变为100.31).

有谁知道如何做到这一点?是否有替代方案JavaScriptSerializer可以让您更详细地控制序列化?

c# json javascriptserializer

22
推荐指数
4
解决办法
3万
查看次数

JavaScriptSerializer从日期减去一天

我正在使用JavaScriptSerializer序列化DateTime,但是当我反序列化它显示从序列化日期开始减少一天:

这是测试:

  DateTime startDate=new DateTime(2012,1,20);//set the 20th of January
  JavaScriptSerializer  serializer=new JavaScriptSerializer();
  string serializeDate= serializer.Serialize(startDate);
  DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate);//I get 19th of Jan
  Assert.Equals(startDate, afterDeserialize);
Run Code Online (Sandbox Code Playgroud)

首先我认为它是因为javascript日期时间格式,但我知道javascript月份是零索引0=January,但我比原始日期少一天.

datetime javascriptserializer c#-4.0

20
推荐指数
2
解决办法
8023
查看次数