0

我有一个带有列表的模型,我需要将其序列化为 JSON 以便向 Web 服务发送请求。

问题是在我的模型中,我有一个需要以特定格式序列化的列表。

我的课程如下所示:

[DataContract()]
public class StanjeZalihaLek : BaseParameters
{
    [DataMember(Name = "datumStanje")]
    public string _datumStanja;

    [DataMember(Name = "type")]
    public int Type { get; set; }
    [IgnoreDataMember]
    public DateTime? DatumStanja { get; set; }        
    [IgnoreDataMember()]
    public List<Lek> ListaLek { get; set; }

    [OnSerializing()]
    protected void OnSerializingMethod(StreamingContext context)
    {
        _datumStanja = DatumStanja?.ToString(FormatDate);
    }
}

所以所有元素都可以,除了 List ListaLek { get; 放; 成员如下所示:

   [DataContract()]
   public class Lek
{
    const string FormatDate = "dd.MM.yyyy";

    [DataMember(Name = "datumUlaz")]
    string _datumUlaza;
    [DataMember(Name = "datumRok")]
    string _rokUpotrebe;

    [DataMember(Name = "jkl")]
    public string JedinstvenaKlasifikacijaLeka { get; set; }
    [DataMember(Name = "kolicina)")]
    public double Kolicina { get; set; }
    [DataMember(Name = "kpp")]
    public string Kpp { get; set; }
    [IgnoreDataMember]
    public DateTime? DatumUlaza { get; set; }
    [IgnoreDataMember]
    public DateTime? RokUpotrebe { get; set; }


    [OnSerializing()]
    protected void OnSerializingMethod(StreamingContext context)
    {
        _datumUlaza = DatumUlaza?.ToString(FormatDate);
        _rokUpotrebe = RokUpotrebe?.ToString(FormatDate);
    }
}

这是我的序列化代码应该是这样的:

{
    "idZu": "12345678",
    "user": "ustanova1",
    "pass": "pass1w0rd",
    "type": "1",
    "datumStanje": "26.02.2019",
    "0": {
        "jkl": "0010200",
        "kolicina": "4",
        "kpp": "071",
        "datumUlaz": "26.02.2019",
        "datumRok": " 31.12.2019"
    },
    "1": {
        "jkl": "0010220",
        "kolicina": "8",
        "kpp": "071",
        "datumUlaz": "26.02.2019",
        "datumRok": " 31.12.2019"
    },
    "2": {
        "jkl": "12205014",
        "kolicina": "12",
        "kpp": "071",
        "datumUlaz": "26.02.2019",
        "datumRok ": "31.12.2019"
    }
}

因此,列表的每个新元素都有一个数字作为其 DataMember 名称,idZu、user 和 pass 是来自 StanjeZalihaLek 派生的 BaseParameters 类的参数。

有任何想法吗?谢谢

4

1 回答 1

0

问题解决了:

        public static byte[] Serialize(this StanjeZalihaLek data)
        {
            var sb = new StringBuilder();

            using (var tw = new System.IO.StringWriter(sb))
            {
                Newtonsoft.Json.JsonTextWriter jsonWriter = new JsonTextWriter(tw);
                jsonWriter.WriteStartObject();     

                jsonWriter.WriteRaw(JsonConvert
                                 .SerializeObject(data)
                                 .Substring(1)
                                 .TrimEnd('}'));

                jsonWriter.WriteRaw(",");

                int inx = 0;
                foreach (var item in data.ListaLek)
                {
                    var str = $"{inx++}";

                    jsonWriter.WritePropertyName(str);
                    jsonWriter.WriteRawValue(JsonConvert.SerializeObject(item));
                }
                jsonWriter.WriteEndObject();
                jsonWriter.Close();

            }

            return System.Text.Encoding.UTF8.GetBytes(sb.ToString());
        }
于 2019-05-23T07:48:29.280 回答