3

次のオブジェクトがあります。

public class TestModel
{
    public object TestValue { get; set; }
}

私のデータベースには JSON 形式の文字列が含まれています。

string dbValue1 = "[\"test value\"]"
string dbValue2 = "[\"one value\",[\"another value|or this value\"]]"
int dbValue3 = 1
bool dbValue4 = true

そして、これらの値をTestModel.TestValueプロパティに逆シリアル化して、オブジェクトをシリアル化したときにデータベースに格納されているのと同じ形式を取得する必要があります。私は明らかに anintまたはboola 基本的な配列を機能させることができますが、少し複雑な配列の場合はできません。上記からdbValue2、出力は次のようになります。

"testValue" : ["one value",["another value|or this value"]]

今、私は ServiceStack.Text を使用しています。これまでのところ、これは私が試したことです:

TestValue = JsonSerializer.DeserializeFromString(dbValue, typeof(object))
TestValue = dbValue.FromJson<object>()
TestValue = JsonObject.Parse(dbValue)

そして、これらは以下を生成します:

"testValue":"[one value,[another value|or this value]]"
"testValue":{"one value":["another value|or this value"]}
"testValue":{"one value":["another value|or this value"]}

これらが機能しない理由は理解できますが、必要なことを行う方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

2

これは、ルート要素が JSON の配列であるためです。ServiceStackはそれで窒息しているようです。

ServiceStack で試して、同じ配列を持つルート オブジェクトをプロパティとして追加するとします。

var json = "{\"root\":[\"one value\",[\"another value|or this value\"]]}";
var testValue = JsonObject.Parse(json);
Console.WriteLine(testValue.ToJson());

配列を正しくシリアル化します。

ただし、 Json.Netは機能しているようです。

var json = "[\"one value\",[\"another value|or this value\"]]";            
var testValue = JsonConvert.DeserializeObject(
Console.WriteLine(JsonConvert.SerializeObject(testValue));

迷惑 :)

于 2013-05-24T10:35:06.767 に答える