2011-06-16 7 views
0

私はこのようになりますオブジェクトを持っている:のasp.net JSONシリアライザの問題

public MyObject 
{ 
    public int ObjectID {get;set;} 
    public byte ObjectStatus {get;set;} 
    public List<MySubObject1> {get;set} 
    public List<MySubObject2> {get;set} 
    ... 
    public List<MySubObject9> {get;set} 

    public string MySubObject1InJson {get;set;} 
    ... 
    public string MySubObject9InJson {get;set;} 

    public string ObjectInJson {get;set;} 

} 

このオブジェクトはjsonformatと完全なオブジェクトのためのObjectInJson文字列に9つのリストと各リストの9つの文字列が含まれています。

次に、私はMyObjectのリストを持っています。

私はJavascriptSerializerを使用しています。まず各オブジェクトの各リストをシリアル化し、対応する文字列をInJson変数に格納します。次に、リストのint、byte、およびjsonの文字列のみを含めることによって、各MyObjectをシリアル化します。最後に、MyObjectのリストをシリアライズします。

私はそれに「\\\をたくさん持っていると、誰かが.NETのJSONシリアライザと、このような問題に遭遇した場合、私は思っていた文字列で終わる。

[{"ObjectID":1492,"ObjectStatus":2,"ObjectJsonFormat":"{\"ObjectID\":1492,\"LStatus\":2,\"LAppoints\":\"[{\\\"AppointID\\\":23350,\\\"AppointType\\\":2,\\\"AppointStatus\\\":3,\\\"AppointDate\\\":\\\"4/23/2011\\\",\\\"AppointTime\\\":\\\"6:49 PM\\\",\\\"AppointSetDate\\\":\\\"4/23/2011\\\",\\\"AppointSetTime\\\":\\\"6:49 PM\\\",\\\"AppointResolvDate\\\":\\\"4/28/2011\\\",\\\"AppointResolvTime\\\":\\\"6:49 PM\\\",\\\"AppointFirst\\\":\\\"NATHAN\\\",\\\"AppointLast\\\":\\\"WEST\\\",\\\"ContactFirstLastListing\\\":\\\"NATHAN WEST\\\"},{\\\"AppointID\\\":23351,\\\"AppointType\\\":1,\\\"AppointStatus\\\":2,\\\"AppointDate\\\":\\\"4/23/2011\\\",\\\"AppointTime\\\":\\\"8:19 PM\\\",\\\"AppointSetDate\\\":\\\"4/23/2011\\\",\\\"AppointSetTime\\\":\\\"8:19 PM\\\",\\\"AppointResolvDate\\\":\\\"4/28/2011\\\",\\\"AppointResolvTime\\\":\\\"8:19 PM\\\",\\\"AppointFirst\\\":\\\"DALE\\\",\\\"AppointLast\\\":\\\"JORDAN\\\",\\\"ContactFirstLastListing\\\":\\\"DALE JORDAN\\\"},{\\\"AppointID\\\":23352,\\\"AppointType\\\":1,\\\"AppointStatus\\\":3,\\\"AppointDate\\\":\\\"4/23/2011\\\",\\\"AppointTime\\\":\\\"9:49 PM\\\",\\\"AppointSetDate\\\":\\\"4/23/2011\\\",\\\"AppointSetTime\\\":\\\"9:49 PM\\\",\\\"AppointResolvDate\\\":\\\"4/28/2011\\\",\\\"AppointResolvTime\\\":\\\"9:49 PM\\\",\\\"AppointFirst\\\":\\\"MANUEL\\\",\\\"AppointLast\\\":\\\"WOODS\\\",\\\"ContactFirstLastListing\\\":\\\"MANUEL WOODS\\\"}]\",\"LNotes\":\"[{\\\"NoteID\\\":14201,\\\"NoteText\\\":\\\"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr\\\",\\\"NoteDate\\\":\\\"1/10/2011\\\",\\\"NoteTime\\\":\\\"11:54 AM\\\"},{\\\"NoteID\\\":14202,\\\"NoteText\\\":\\\"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr\\\",\\\"NoteDate\\\":\\\"1/10/2011\\\",\\\"NoteTime\\\":\\\"12:24 PM\\\"},{\\\"NoteID\\\":14203,\\\"NoteText\\\":\\\"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr\\\",\\\"NoteDate\\\":\\\"1/10/2011\\\",\\\"NoteTime\\\":\\\"12:54 PM\\\"},{\\\"NoteID\\\":14204,\\\"NoteText\\\":\\\"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr\\\",\\\"NoteDate\\\":\\\"1/10/2011\\\",\\\"NoteTime\\\":\\\"1:24 PM\\\"}]\",\"LCustom\":\"0\",\"LContact\":\"[{\\\"ContactID\\\":8758,\\\"ContactSort\\\":1,\\\"ContactFirst\\\":\\\"STEVEN\\\",\\\"ContactMiddle\\\":\\\"\\\",\\\"ContactLast\\\":\\\"GARCIA\\\",\\\"ContactFirstLast\\\":\\\"STEVEN GARCIA\\\",\\\"ContactEmail\\\":\\\"[email protected]\\\"},{\\\"ContactID\\\":8759,\\\"ContactSort\\\":2,\\\"ContactFirst\\\":\\\"EDWARD\\\",\\\"ContactMiddle\\\":\\\"\\\",\\\"ContactLast\\\":\\\"MARTINEZ\\\",\\\"ContactFirstLast\\\":\\\"EDWARD MARTINEZ\\\",\\\"ContactEmail\\\":\\\"[email protected]\\\"},{\\\"ContactID\\\":8760,\\\"ContactSort\\\":3,\\\"ContactFirst\\\":\\\"BRIAN\\\",\\\"ContactMiddle\\\":\\\"\\\",\\\"ContactLast\\\":\\\"ROBINSON\\\",\\\"ContactFirstLast\\\":\\\"BRIAN ROBINSON\\\",\\\"ContactEmail\\\":\\\"[email protected]\\\"}]\",\"LAddress\":\"[{\\\"AddressID\\\":14293,\\\"AddressSort\\\":1,\\\"AddressLabel\\\":\\\"Primary Address\\\",\\\"Address1\\\":\\\"1305 S 1st St\\\",\\\"Address2\\\":\\\"Suite 3\\\",\\\"AddressCity\\\":\\\"San Jose\\\",\\\"AddressState\\\":\\\"CA\\\",\\\"AddressZip\\\":\\\"95008\\\",\\\"AddressCounty\\\":\\\"Santa Clara\\\",\\\"AddressCountry\\\":\\\"USA\\\"}]\",\"LBiz\":\"0\",\"LPhone\":\"0\",\"LStatusH\":\"[{\\\"NewStatus\\\":2,\\\"StatusDate\\\":\\\"4/09/2011\\\"},{\\\"NewStatus\\\":3,\\\"StatusDate\\\":\\\"4/14/2011\\\"},{\\\"NewStatus\\\":2,\\\"StatusDate\\\":\\\"4/19/2011\\\"}]\",\"LEmail\":\"0\",\"LCall\":\"[{\\\"CallDate\\\":\\\"5:54 AM\\\",\\\"CallTime\\\":\\\"5/20/2011\\\",\\\"CallDuration\\\":5457,\\\"CallOutcome\\\":1,\\\"CallPhonePrefix\\\":1,\\\"CallPhoneNumber\\\":\\\"4084840241\\\"},{\\\"CallDate\\\":\\\"5:24 AM\\\",\\\"CallTime\\\":\\\"5/23/2011\\\",\\\"CallDuration\\\":11,\\\"CallOutcome\\\":4,\\\"CallPhonePrefix\\\":1,\\\"CallPhoneNumber\\\":\\\"4084840241\\\"}]\"}"},{"ObjectID":1496,

感謝。

答えて

1

MyObjectのインスタンスをシリアル化するだけで済みます。シリアライザは内部リストを自動的にシリアル化します。

プロパティを無視する必要がある場合は、russauのように[ScriptIgnore]属性を使用することをお勧めします。

例えば、

public class MySubObject 
{ 
// The JavaScriptSerializer ignores this field. 
     [ScriptIgnore] 
     public int useID { get; set; } 
} 
+0

問題は、それぞれのサブオブジェクトに含まれたくないプロパティ(つまり、usedID)があることです。ですから、私は最初にサブオブジェクトの各リストをシリアル化しています。 – frenchie

+0

これらのプロパティにScriptIgnore属性を設定できますか? http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx – russau

+0

これを行うと、シリアライゼーションはどのように影響を受けますか?現在のところ、辞書を宣言し、直列化したい各プロパティに対して.Add( "Property"、Object.property)を使用します。 – frenchie

0

「トリプルJSONをシリアライズする」と言いますと、すべての引用符で終わる可能性があります。オブジェクトをJSONに変換すると、引用符( " )obejctの名前(および場合によっては値)を囲んでいます。もう一度シリアル化すると、文字列内の引用符をエスケープする必要があります。つまり、\"です。そしてそれを再びシリアル化すると、エスケープ記号自体もエスケープされるので、\\\"となります。

+0

[OK]をクリックします。では、回避策は何ですか? – frenchie