.NET Core 项目与 .NET Framework 中为 System.Data.DataTable 生成的 JSON 的变化 [英] Change in JSON generated for a System.Data.DataTable in a .NET Core project vs .NET Framework

查看:18
本文介绍了.NET Core 项目与 .NET Framework 中为 System.Data.DataTable 生成的 JSON 的变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下程序在 .NET Core 项目和 .NET Framework 应用程序中运行时生成不同的 JSON.

The program below generates different JSON when run in a .NET Core project vs a .NET Framework app.

代码

class Program
{
    internal static readonly MediaTypeFormatter DefaultFormatter = new JsonMediaTypeFormatter
    {
        UseDataContractJsonSerializer = false,
        SerializerSettings =
        {
            NullValueHandling = NullValueHandling.Ignore,
            DateTimeZoneHandling = DateTimeZoneHandling.Utc,
            DateFormatHandling = DateFormatHandling.IsoDateFormat
        }
    };

    private static DataTable BuildTestDataTable()
    {
        var testDataTable = new DataTable();
        testDataTable.Columns.Add("Label", typeof(string));
        testDataTable.Columns.Add("Metric", typeof(decimal));
        testDataTable.Rows.Add("A", 10);
        testDataTable.Rows.Add("B", 20);
        return testDataTable;
    }

    static void Main(string[] args)
    {
        DataTable table = BuildTestDataTable();

        ObjectContent oc = new ObjectContent(table.GetType(), table, DefaultFormatter);

        Console.WriteLine(oc.ReadAsStringAsync().Result);

        Console.ReadKey();
    }
}

.Net 框架:

[{"Label":"A","Metric":10.0},{"Label":"B","Metric":20.0}]

.Net 核心:

{
    "DataTable.RemotingVersion": {
        "_Major": 2,
        "_Minor": 0,
        "_Build": -1,
        "_Revision": -1
    },
    "XmlSchema": "<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Table1">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Label" type="xs:string" msdata:targetNamespace="" minOccurs="0" />
        <xs:element name="Metric" type="xs:decimal" msdata:targetNamespace="" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="tmpDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded" />
    </xs:complexType>
  </xs:element>
</xs:schema>",
    "XmlDiffGram": "<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
  <tmpDataSet>
    <Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted">
      <Label>A</Label>
      <Metric>10</Metric>
    </Table1>
    <Table1 diffgr:id="Table12" msdata:rowOrder="1" diffgr:hasChanges="inserted">
      <Label>B</Label>
      <Metric>20</Metric>
    </Table1>
  </tmpDataSet>
</diffgr:diffgram>"
}

有人能解释一下这件事的原因吗,这是否是故意的差异?

Can someone illuminate me on the cause of this, and whether it is an intentional difference ?

推荐答案

根据 https://github.com/JamesNK/Newtonsoft.Json/issues/1383

在 netstandard1.5 中,但 netstandard1.3 是 Json.NET 支持的最高值.当最终添加 netstandard2.0 版本时,我将添加对它的支持.

It is in netstandard1.5 but netstandard1.3 is the highest that Json.NET supports. When a netstandard2.0 build is eventually added then I'll add support for it.

这篇关于.NET Core 项目与 .NET Framework 中为 System.Data.DataTable 生成的 JSON 的变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆