Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何序列化列表<;(字符串,字符串,字符串)>;使用C中的System.Text.Json#_C#_Serialization_System.text.json - Fatal编程技术网

C# 如何序列化列表<;(字符串,字符串,字符串)>;使用C中的System.Text.Json#

C# 如何序列化列表<;(字符串,字符串,字符串)>;使用C中的System.Text.Json#,c#,serialization,system.text.json,C#,Serialization,System.text.json,我第一次尝试使用将被序列化为JSON的数据类来生成报告,而不是手动生成报告。我的数据的核心是这样声明的列表 OID= 1.3.6.1.2.1.1.1.0 Translation= BGP4-V2-MIB::bgpM2BaseNotifications Data= OID= 1.3.6.1.2.1.1.2.0 Translation= CABH-IETF-CAP-MIB::cabhCapNotification Data= 1.3.6.1.4.1.8691.10.2210 OID= 1.3.6.

我第一次尝试使用将被序列化为JSON的数据类来生成报告,而不是手动生成报告。我的数据的核心是这样声明的列表

OID= 1.3.6.1.2.1.1.1.0 Translation= BGP4-V2-MIB::bgpM2BaseNotifications Data= 
OID= 1.3.6.1.2.1.1.2.0 Translation= CABH-IETF-CAP-MIB::cabhCapNotification Data= 1.3.6.1.4.1.8691.10.2210
OID= 1.3.6.1.2.1.1.3.0 Translation= DISMAN-EVENT-MIB::sysUpTimeInstance Data= 01:39:31.4500000
OID= 1.3.6.1.2.1.1.4.0 Translation= SNMPv2-MIB::sysContact.0 Data= 
OID= 1.3.6.1.2.1.1.5.0 Translation= SNMPv2-MIB::sysName.0 Data= E2210_6115
OID= 1.3.6.1.2.1.1.6.0 Translation= SNMPv2-MIB::sysLocation.0 Data= 
OID= 1.3.6.1.2.1.1.7.0 Translation= SNMPv2-MIB::sysServices.0 Data= 72
OID= 1.3.6.1.2.1.2.1.0 Translation= RFC-1213-MIB::ifNumber.0 Data= 2
OID= 1.3.6.1.2.1.2.2.1.1.1 Translation= RFC-1213-MIB::ifIndex.1 Data= 1
OID= 1.3.6.1.2.1.2.2.1.1.2 Translation= RFC-1213-MIB::ifIndex.2 Data= 2
OID= 1.3.6.1.2.1.2.2.1.2.1 Translation= RFC-1213-MIB::ifDescr.1 Data= Moxa Ethernet port 01
OID= 1.3.6.1.2.1.2.2.1.2.2 Translation= RFC-1213-MIB::ifDescr.2 Data= Moxa serial port 01

 "dataArray": [
    {
      "Oid": {
        "1.3.6.1.2.1.1.1.0"
      },
      "Data": {
        ""
      },
      "Desc": {
        "BGP4-V2-MIB::bgpM2BaseNotifications"
      }
    },
    {
      "Oid": {
        "1.3.6.1.2.1.1.2.0"
      },
      "Data": {
        "1.3.6.1.4.1.8691.10.2210"
      },
      "Desc": {
        "CABH-IETF-CAP-MIB::cabhCapNotification"
      }
    },
    {
      "Oid": {
        "1.3.6.1.2.1.1.3.0"
      },
      "Data": {
        "05:42:39.6300000"
      },
      "Desc": {
        "DISMAN-EVENT-MIB::sysUpTimeInstance"
      }
    },
    {
      "Oid": {
        "1.3.6.1.2.1.1.4.0"
      },
      "Data": {
        ""
      },
      "Desc": {
        "SNMPv2-MIB::sysContact.0"
      }
    },
    {
      "Oid": {
        "1.3.6.1.2.1.1.5.0"
      },
      "Data": {
        "E2210_6115"
      },
      "Desc": {
        "SNMPv2-MIB::sysName.0"
      }
    },
....
public List assetData{get;set;}

我的序列化函数是

        private static void Serialize(Asset asset, JsonSerializerOptions? options = null)
        {
            var json = JsonSerializer.Serialize<Asset>(
                asset,
                options ?? new JsonSerializerOptions() { 
                    WriteIndented = true,
                    IgnoreNullValues = true,
                });
            Console.WriteLine(json);

        }
元组的工作方式类似于字段(而不是属性)。默认情况下,序列化程序将忽略字段

您需要启用:

private static void Serialize(资产资产,JsonSerializerOptions?选项=null)
{
var json=JsonSerializer.Serialize(
资产,
选项??新JsonSerializerOptions{
WriteIndended=true,
IgnoreNullValues=true,
includefelds=true
}
);
Console.WriteLine(json);
}
元组的工作方式类似于字段(而不是属性)。默认情况下,序列化程序将忽略字段

您需要启用:

private static void Serialize(资产资产,JsonSerializerOptions?选项=null)
{
var json=JsonSerializer.Serialize(
资产,
选项??新JsonSerializerOptions{
WriteIndended=true,
IgnoreNullValues=true,
includefelds=true
}
);
Console.WriteLine(json);
}

解决方案是创建一个自定义JsonConverter类

public class ListConverter : JsonConverter<List<(string,string,string)>>
    {
        public override List<(string, string, string)> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            throw new NotImplementedException();
        }

        public override void Write(Utf8JsonWriter writer, List<(string, string, string)> value, JsonSerializerOptions options)
        {

            writer.WriteStartArray("dataArray");

            foreach (var line in value)
            {
                writer.WriteStartObject();
                writer.WriteStartObject("Oid");
                writer.WriteStringValue(line.Item1);
                writer.WriteEndObject();
                writer.WriteStartObject("Data");
                writer.WriteStringValue(line.Item2);
                writer.WriteEndObject();
                writer.WriteStartObject("Desc");
                writer.WriteStringValue(line.Item3);
                writer.WriteEndObject();
                writer.WriteEndObject();



            }
            writer.WriteEndArray();
        }

    }

它可能还有改进的余地,但现在我知道如何在将来做到这一点。

解决方案是创建一个定制的JsonConverter类

public class ListConverter : JsonConverter<List<(string,string,string)>>
    {
        public override List<(string, string, string)> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            throw new NotImplementedException();
        }

        public override void Write(Utf8JsonWriter writer, List<(string, string, string)> value, JsonSerializerOptions options)
        {

            writer.WriteStartArray("dataArray");

            foreach (var line in value)
            {
                writer.WriteStartObject();
                writer.WriteStartObject("Oid");
                writer.WriteStringValue(line.Item1);
                writer.WriteEndObject();
                writer.WriteStartObject("Data");
                writer.WriteStringValue(line.Item2);
                writer.WriteEndObject();
                writer.WriteStartObject("Desc");
                writer.WriteStringValue(line.Item3);
                writer.WriteEndObject();
                writer.WriteEndObject();



            }
            writer.WriteEndArray();
        }

    }

它可能有改进的余地,但现在我知道如何在将来做到这一点。

请分享一个。用代码填充数据。做正确的事。你不能用那个吗?请分享一个。用代码填充数据。做正确的事。你不能用它吗?我确实试过,但我知道“JsonSerializerOptions”不包含“IncludeFields”的定义。我想手动定义哪些字段将被序列化。我使用的是Sytem.Text.Json 5.0.0。经过一些研究,我发现.NET Core 3.1中的System.Text.Json不支持包含字段。自定义转换器可以提供此功能。您的目标是什么?.NET Core 3.1,我应该提到。我确实尝试过,但我发现“JsonSerializerOptions”不包含“IncludeFields”的定义。我想手动定义哪些字段将被序列化。我使用的是Sytem.Text.Json 5.0.0。经过一些研究,我发现.NET Core 3.1中的System.Text.Json不支持包含字段。自定义转换器可以提供此功能。您的目标是.NET?我应该提到.NET Core 3.1。