如何在不添加“?

时间:2015-12-10 13:25:05

标签: c# json json.net

我正在使用C#,.NET Framework 4.0和Newtonsoft.Json 6.0.8开发一个库。

我正在尝试创建自己的序列化程序:

public static string Serialize(List<Models.Codes> codes)
{
    if (codes == null)
        throw new ArgumentNullException("codes");
    if (codes.Count == 0)
        throw new ArgumentOutOfRangeException("codes");

    StringWriter sw = new StringWriter();
    JsonTextWriter writer = new JsonTextWriter(sw);

    writer.WriteStartArray();
    foreach (Models.Codes code in codes)
        writer.WriteValue(CodesSerializer.Serialize(code));

    writer.WriteEndArray();

    return sw.ToString();
}

public static string Serialize(Models.Codes code)
{
    if (code == null)
        throw new ArgumentNullException("code");

    StringWriter sw = new StringWriter();
    JsonTextWriter writer = new JsonTextWriter(sw);

    writer.WriteStartObject();

    writer.WritePropertyName("Code");
    writer.WriteValue(code.Code);

    writer.WritePropertyName("BatchId");
    writer.WriteValue(code.BatchId);

    writer.WritePropertyName("ProductId");
    writer.WriteValue(code.ProductId);

    writer.WritePropertyName("CodeLevel");
    writer.WriteValue(code.CodeLevel);

    writer.WritePropertyName("CommisioningFlag");
    writer.WriteValue(code.CommisioningFlag);

    writer.WritePropertyName("Timespan");
    writer.WriteValue(code.Timespan);

    if (!string.IsNullOrWhiteSpace(code.Username))
    {
        writer.WritePropertyName("Username");
        writer.WriteValue(code.Username);
    }

    if (!string.IsNullOrWhiteSpace(code.Source))
    {
        writer.WritePropertyName("Source");
        writer.WriteValue(code.Source);
    }

    if (!string.IsNullOrWhiteSpace(code.Reason))
    {
        writer.WritePropertyName("Reason");
        writer.WriteValue(code.Reason);
    }

    writer.WriteEndObject();

    string text = sw.ToString();

    return text;
}

但它会生成如下字符串:

[\"{\\\"Code\\\":\\\"81861400008000002386\\\",\\\"BatchId\\\":5,\\\"ProductId\\\":7,\\\"CodeLevel\\\":1,\\\"CommisioningFlag\\\":1,\\\"Timespan\\\":null}\",

你有没有注意到“{{/

之前的额外”

我怎么能不把它“?

我认为问题在于我在循环内的数组中添加了一个值:

    writer.WriteStartArray();
    foreach (Models.Codes code in codes)
        writer.WriteValue(CodesSerializer.Serialize(code));

    writer.WriteEndArray();

我已使用writer.WriteValue(CodesSerializer.Serialize(code));更改writer.WriteRaw(CodesSerializer.Serialize(code));,现在它不会写“,但现在我需要编写JSON值分隔符,我不能使用writer.WriteValueDelimiter();

如何在不添加“?

的情况下向JSON数组添加元素

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我必须使用writer.WriteRawValue()

writer.WriteStartArray();
foreach (Models.Codes code in codes)
    writer.WriteRawValue(CodesSerializer.Serialize(code));

writer.WriteEndArray();