【问题标题】:JSON decimal to doubleJSON十进制翻倍
【发布时间】:2013-02-04 15:04:58
【问题描述】:

有没有办法设置 JSON 将变量解码为双精度而不是十进制?

示例:

[DataContract]
class ReturnData
{
    [DataMember]
    public object[] array { get; set; }
}

public ReturnData DecodeJsonString()
{
    string str = "{ \"array\" : [\"custom array\", 0.1, 0.2, 0.3, 0.4] }";
    var json = new DataContractJsonSerializer(typeof(ReturnData));
    var stream = new MemoryStream(Encoding.UTF8.GetBytes(str));
    var obj = json.ReadObject(stream);
    stream.Close();
    return (ReturnData)obj;
}

我得到包含十进制数字的“obj”数组,但我需要它是双倍的。我不想自己转换成双倍。有没有办法教 JsonSerializer 这样做?

【问题讨论】:

  • 你不能将array声明为double[]吗?
  • 不,数组是自定义的。它也可以包含字符串类型。

标签: c# json datacontractjsonserializer


【解决方案1】:

你真的受限于使用typeof(object)吗?

您可以创建自己的自定义合同类:

[DataContract]
class MyClass
{
    [DataMember]
    public double[] array { get; set; }
}

然后从第二行引用:

var json = new DataContractJsonSerializer(typeof(MyClass));

作为参考,这是我开始工作的完整控制台应用程序代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;

namespace ConsoleApplication1
{
    [DataContract]
    class MyClass
    {
        [DataMember]
        public double[] array { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            GetStuff();
        }

        static object GetStuff()
        {
            string str = "{ \"array\" : [0.1, 0.2, 0.3, 0.4] }";

            var json = new DataContractJsonSerializer(typeof(MyClass));
            var stream = new MemoryStream(Encoding.UTF8.GetBytes(str));
            var obj = json.ReadObject(stream);
            stream.Close();
            return obj;
        }
    }
}

【讨论】:

  • 数组可能不仅包含双数,抱歉问题不好,我现在修复了。
  • 是的,这确实会有所改变。
猜你喜欢
  • 2011-02-05
  • 2013-09-27
  • 2017-03-26
  • 2015-09-16
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
相关资源
最近更新 更多