有没有办法设置JSON会将变量解码为double而不是decimal?
示例:
[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”数组,但我需要它是double。我不想被自己转换为双倍。有没有办法教JsonSerializer这样做?
答案 0 :(得分:3)
您是否真的被限制使用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;
}
}
}